从列表的子列表中提取第n个元素并将它们组合在一个新列表中?

时间:2016-08-26 08:11:56

标签: scala

鉴于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还是应该将mapflatten或其他内容结合使用?任何提示都非常有用。

3 个答案:

答案 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))