将列表划分为两个以上的分区
Partitioning a List into more than two partitions
我有一个列表:
val list1 = List("male:Adam", "male:Peter", "female:Jane", "female:Sue", "female:Jo", "other:John")
我想创建两个列表,一个是女性名字,一个是男性名字。
即:
List("Adam", "Peter")
List("Jane", "Sue", "Jo")
我用
完成了这个
val result = list1.groupBy(_.startsWith("male"))
所以 result
有两个列表映射到 true
和 false
但每个元素都是 "male:Adam"
等。但是我必须循环每个列表删除 male:
和 female:
字符串。这闻起来没有功能。
谁能展示如何以实用的方式解决上述问题?
像
一样使用地图功能
result(true).map(_.split(":")(1))
val groups = list.map(_.split(":")).groupBy(_(0)).mapValues(_.map(_(1)))
val males = groups("male")
val females = groups("female")
val map = list1.map(s => s.split(":") match {
case Array(sex, name) => (sex, name)
})
.groupBy { case (sex, name) => sex }
.mapValues(_.map{ case (sex, name) => name })
val male = map("male")
// List(Adam, Peter)
val female = map("female")
// List(Jane, Sue, Jo)
我有一个列表:
val list1 = List("male:Adam", "male:Peter", "female:Jane", "female:Sue", "female:Jo", "other:John")
我想创建两个列表,一个是女性名字,一个是男性名字。 即:
List("Adam", "Peter")
List("Jane", "Sue", "Jo")
我用
完成了这个val result = list1.groupBy(_.startsWith("male"))
所以 result
有两个列表映射到 true
和 false
但每个元素都是 "male:Adam"
等。但是我必须循环每个列表删除 male:
和 female:
字符串。这闻起来没有功能。
谁能展示如何以实用的方式解决上述问题?
像
一样使用地图功能result(true).map(_.split(":")(1))
val groups = list.map(_.split(":")).groupBy(_(0)).mapValues(_.map(_(1)))
val males = groups("male")
val females = groups("female")
val map = list1.map(s => s.split(":") match {
case Array(sex, name) => (sex, name)
})
.groupBy { case (sex, name) => sex }
.mapValues(_.map{ case (sex, name) => name })
val male = map("male")
// List(Adam, Peter)
val female = map("female")
// List(Jane, Sue, Jo)