在Scala的MailKit中,keySet
方法返回Map键的集合。
未设置地图值的集合(因为两个键可能引用相同的值,因此它是多组的)。 Map类的valuesIterator
方法返回一个迭代器,它使这些值可以遍历,因此可以构建Map的值集,如下所示:
val f=Map(1->10,2->15,3->20,4->20,6->20)
val it=f.valuesIterator
var valueSet=Set.empty[Int]
while (it.hasNext){
valueSet=valueSet+it.next();
}
println(valueSet) // this will print Set(10, 20, 15)
问题:
是否有任何简洁的方法可以将地图的值作为一组来获取?
答案 0 :(得分:4)
您可能正在寻找TraversableOnce
上的toSet
方法:
def toSet[B >: A]: immutable.Set[B]
将此可遍历或迭代器转换为集合。 注意:对于无限大小的集合,不会终止。
返回一个包含此遍历或迭代器的所有元素的集合。
您可以Map
或map.values.toSet
在map.valuesIterator.toSet
上与values
或valuesIterator
方法一起使用。
您可能还对采用可变参数的Set.apply
方法感兴趣,该参数可在此处调用:Set(map.values.toList:_*)
。
如果你确实需要像你所做的那样迭代地构建一个集合,你应该熟悉构建器模式,它允许你暂时只使用一个可变数据结构,并避免有状态和容易出错{{1} }。例如,您可以执行vars
。
答案 1 :(得分:0)
另一种解决方法是使用swap
反转地图,然后抓住keyset
val myMap = Map(("A", 1), ("B", 2), ("C", 3))
myMap.map(_.swap).keySet