从列表数组

时间:2019-10-20 08:20:04

标签: scala

嗨,我正在尝试从下面的列表数组中获取元素的第二位置和第四位置。有人可以指导我如何从下面的列表中获取它

List[Array[String]] = List(Array(111, 1, 333, 100), Array(112, 2, 222, 505), Ar 0), Array(117, 1, 444, 540), Array(118, 1, 666, 4400), Array(119, 3, 333, 3300), Array 00))

预期结果应该是

List((1,100), (2,505), (3,510), (4,600), (1,510), (1,520), (1,540), (1,4400), (3,3300), (1,1500), (1,2500), (3,4500), (1,1100))

1 个答案:

答案 0 :(得分:0)

以下是使用map的解决方案:

 yourList.map(_.toList) // 1.
  .map  {
    case _::b::_::d::_ => b::d::Nil // 2.
    case _ => Nil // 3.
  }.filterNot(_.isEmpty) // .4
  1. 将元素更改为List,因为它们很容易匹配。
  2. 使用模式匹配映射元素列表。
  3. 处理意外情况。
  4. 删除未处理的案件。

这会给您:List(List(1, 100), List(2, 505), List(1, 540), List(1, 4400), List(3, 3300))

发表评论后(您希望拥有这些数组的每个2.元素):

yourList.map(
   _.grouped(2)   // 1.
    .filter(_.size == 2) // 2.
    .map(_.last) // 3.
    .toList
) 
  1. 创建2个分组
  2. 仅删除一个元素即可删除
  3. 只参加小组的最后一场比赛

为进一步简化,您可以使用collect

yourList.map(
   _.grouped(2)   // 1.
    .collect{ case Seq(_, e) => e} // 2. and 3. in one step
    .toList
)