从一组键创建映射

时间:2013-11-15 19:17:47

标签: scala map set

我有一组键,比如Set[MyKey],对于我想通过某个值函数计算值的每个键,我们可以说computeValueOf(key: MyKey)。最后,我希望有Map映射key -> value

如果不迭代太多,最有效的方法是什么?

2 个答案:

答案 0 :(得分:3)

Tuple2 s的集合可以转换为Map,其中元组的第一个元素是键,第二个元素是值。

val setOfKeys = Set[MyKey]()
setOfKeys.map(key => (key, computeValueOf(key)).toMap

答案 1 :(得分:2)

这实际上是collection.breakOut的一个非常简洁的应用程序,这是我最喜欢的Scala voodoo之一:

type MyKey = Int

def computeValueOf(key: MyKey) = "value" * key
val mySet: Set[MyKey] = Set(1, 2, 3)

val myMap: Map[MyKey, String] =
  mySet.map(k => k -> computeValueOf(k))(collection.breakOut)

有关此处发生的事情的讨论,请参阅this answer。与具有toMap的版本不同,这不会构造中间Set,从而节省了一些分配和遍历。它的可读性也差得多 - 我只提供它,因为你提到你想避免“迭代过多”。