我有一组键,比如Set[MyKey]
,对于我想通过某个值函数计算值的每个键,我们可以说computeValueOf(key: MyKey)
。最后,我希望有Map
映射key -> value
如果不迭代太多,最有效的方法是什么?
答案 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
,从而节省了一些分配和遍历。它的可读性也差得多 - 我只提供它,因为你提到你想避免“迭代过多”。