鉴于List[List[Any]]
,如何将其减少到包含每个子列表的第n个元素的List[Any]
?
让我用一个例子解释一下。这是最初的清单:
List(List(1,2,3,44),List(2,3,4,55))
我想从List(1,2,3,44)
和List(2,3,4,55)
中提取第4个元素,以便获得:
List(44,55)
它应该使用reduce
还是应该将map
与flatten
或其他内容结合使用?任何提示都非常有用。
答案 0 :(得分:2)
将每个子列表提升为部分函数,其中未定义的列表位置映射到None
,并将定义的位置映射到Some(listValue)
,并使用flatMap
展平到列表,< / p>
xs.flatMap(_.lift(3))
res1: List[Int] = List(44, 55)
xs.flatMap(_.lift(4))
res2: List[Int] = List()
答案 1 :(得分:0)
你尝试了什么?
像
这样的东西val ll = List(List(1,2,3,44),List(2,3,4,55))
ll.map(_.apply(3))
正常工作。
只要你提取单个元素,你的结果就已经变平了。
答案 2 :(得分:0)
你可以这样做:
list.map(_(3))
但这不太安全:如果您的子列表没有足够的元素,您将获得IndexOutOfBoundsException
更安全的解决方案是:
list.flatten(_.lift(3))