【问题标题】:toMap when keys are repeated with different values当键以不同的值重复时的 toMap
【发布时间】:2014-03-06 21:40:21
【问题描述】:

我有一个清单

val data = List(2, 4, 3, 2, 1, 1, 1,7)

我想用它创建一个映射,使得上面列表中的值是新的键,我尝试过的新值是 indeces

scala> data.zipWithIndex.toMap
res5: scala.collection.immutable.Map[Int,Int] = Map(1 -> 6, 2 -> 3, 7 -> 7, 3 -> 2, 4 -> 1)

但奇怪的是它给出 res5(1) 为 6,但我希望它为 4。

我可以解决它

data.zipWithIndex groupBy (_._1) mapValues (w=>w.map(tuple=>tuple._2) min)

但是有什么方法可以将函数 f 传递给 toMap 以便它以所需的方式创建地图。

【问题讨论】:

  • 也许MultiMap 会满足您的需求?

标签: scala functional-programming scala-2.8


【解决方案1】:

toMap 将按照压缩列表的顺序将每一对添加到映射中,当您将映射 k -> v 添加到已经包含 k 的映射时,旧值将被简单地替换。

一个简单的解决方法是在压缩索引之后和转换为地图之前反转列表:

data.zipWithIndex.reverse.toMap

现在1 -> 61 -> 5 映射将添加到1 -> 4 之前,这意味着1 -> 4 是您将在结果中看到的映射。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多