我是Scala&Set的新手。我试图连接Set与空Set。代码如下:
def getAllSlots(preferences: Map[Band, List[Slot]]): Set[Slot] = {
preferences.foldLeft(Set.empty){(r,c) => c match {
case (_, li) => li.toSet ++ r
case _ => r
}}
}
当我尝试li.toSet ++ r
时发生错误,抱怨... doesn't conform to expected type Set[Nothing]
。然后,我不知道如何从空的那个开始建立一个Set。
谢谢大家。
答案 0 :(得分:4)
您必须帮助编译器推断出正确的类型,它没有足够的信息来确定您的意思Set[Slot]
,empty
采用类型参数:
def getAllSlots(preferences: Map[Band, List[Slot]]): Set[Slot] = {
preferences.foldLeft(Set.empty[Slot]){(r,c) => c match {
case (_, li) => li.toSet ++ r
case _ => r
}}
}
答案 1 :(得分:2)
更简单,更整洁的解决方案
preferences.valuesIterator.flatten.toSet
使用valuesIterator
然后flatten
获取偏好设置地图的所有值,然后使用toSet
功能转换为设置。
getAllSlots
功能变为
def getAllSlots(preferences: Map[Band, List[Slot]]): Set[Slot] =
preferences.valuesIterator.flatten.toSet