Scala 如何对独特的项目进行分组
如果我有以下数据:Scala 如何对独特的项目进行分组,scala,Scala,如果我有以下数据: List ( Color("red", "43"), Color("red", "53"), Color("red", "63"), Color("red", "43") ) 如果我在上面执行val myMap:Map[String,List[Color]]=myList.groupBy(u.id),我会得到以下结果: Map( "43" -> List(Color("red", "43"), Color("red", "43"))
List (
Color("red", "43"),
Color("red", "53"),
Color("red", "63"),
Color("red", "43")
)
如果我在上面执行val myMap:Map[String,List[Color]]=myList.groupBy(u.id)
,我会得到以下结果:
Map(
"43" -> List(Color("red", "43"), Color("red", "43")),
"53" -> List(Color("red", "53")),
"63" -> List(Color("red", "63"))
)
如何仅对唯一项执行groupBy
,而不是上述操作。最终,要做到以下几点:
Map(
"43" -> List(Color("red", "43")),
"53" -> List(Color("red", "53")),
"63" -> List(Color("red", "63"))
)
您可以将组转换为
集合
,以仅获取唯一元素
myList.groupBy(_.id).mapValues(_.toSet)
或者,如Dima所述,如果要将组保留为列表
使用distinct
myList.groupBy(_.id).mapValues(_.distinct)
您可以将组转换为
集合
,以仅获取唯一元素
myList.groupBy(_.id).mapValues(_.toSet)
或者,如Dima所述,如果要将组保留为列表
使用distinct
myList.groupBy(_.id).mapValues(_.distinct)
它必须是一个
groupBy
?您的示例非常简单,只需使用map
:val-map:map[String,Color]=list.map(c=>c.id->c)(collection.breakout)
它必须是groupBy
?您的示例非常简单,只需使用map
即可解决:val-map:map[String,Color]=list.map(c=>c.id->c)(collection.breakout)
在我的问题中,我是否可以维护myMap
的定义,即map[String,list[Color]
而不是map[String,Set[Color]]
你的答案会提供哪一个?@Anthony IMHO集合
类型更能传达唯一性属性。但是,如果出于某些外部原因,您必须匹配类型,只需将其更改为.mapValues(u.toSet.toList)
,正如@SerGr所说,如果您想确保某个对象只有唯一的元素,那么它必须是集。或者,如果您确实需要它成为一个列表
,请使用Serg提供的代码。您不需要转换为set和back来获取不同的元素.mappValues(u.distinct)
就可以了。如果你稍微改变一下,你的中间集合(垃圾)就会少一些:myList.distinct.groupBy(u.id)
我可以在我的问题中维护myMap
的定义吗,它是Map[String,List[Color]
而不是Map[String,Set[Color]]
你的答案会提供哪一个?@Anthony IMHO集合
类型更能传达唯一性属性。但是,如果出于某些外部原因,您必须匹配类型,只需将其更改为.mapValues(u.toSet.toList)
,正如@SerGr所说,如果您想确保某个对象只有唯一的元素,那么它必须是集。或者,如果您确实需要它成为一个列表
,请使用Serg提供的代码。您不需要转换为set和back来获取不同的元素.mappValues(u.distinct)
就可以了。如果稍微改变一下,中间集合(垃圾)就会减少:myList.distinct.groupBy(u.id)