【问题标题】:Scala Tuple Sequence ComparisonScala 元组序列比较
【发布时间】:2014-03-18 01:58:53
【问题描述】:

我有两个包含类型和整数作为第一个和第二个值的元组序列。第二个元组是 groupedBy 元组,因为只有一种类型和一个值。第一个元组可能包含多个具有相同类型和不同值的元素。我需要做的是根据类型对第一个元组进行分组,并添加属于同一类型的值的结果,然后将其与第二个元组序列聚合。如果第一个序列包含第二个序列中没有的新元素,则需要将其添加到第二个序列中。

val t1 = Seq[(TypeA, 1), (TypeB, 2), (TypeA, 3), (TypeC, 5)]
val t2 = Seq[(TypeA, 2), (TypeB, 4)]

从上面的例子中,t1 需要首先为 Type 加上值,然后给我:

val groupedT1 = Seq[(TypeA, 4), (TypeB, 2), (TypeC, 5)]

现在 groupedT1 需要以相同的方式添加到 t2。我使用 groupBy 函数作为我的起点并将其应用到 t1 上,这给了我:

t1.groupBy(_._1) // Gave me a Map(TypeA -> ArraySeq((TypeA, 1), (TypeA, 3)), TypeB.... and so on)

为了得到我的结果,我知道我必须对元组执行 mapValues 和 foldLeft 操作,以便我可以取回聚合结果,但是我无法正确获取语法。有什么帮助或更好的主意吗?

【问题讨论】:

    标签: scala


    【解决方案1】:

    你在这里:

    val result = t1.groupBy(_._1).mapValues(_.foldLeft(0)((sum, current) => sum + current._2))
    

    【讨论】:

    • 我或多或少地达到了相同的解决方案,但添加了参数而不使用下划线。谢谢回复!这实际上部分回答了我原来的帖子。现在到第二部分,我需要将此序列添加到 t1。让我弄清楚,我会发布我的尝试!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多