通过列表列表中的第一个元素获取列表

时间:2018-09-30 04:40:12

标签: scala

您好,我是scala的新手,并且对此表示怀疑,我有一个看起来像这样的列表

(4,List(List(2, 4, 0, 2, 4), List(3, 4, 0, 2, 4), List(4, 0, 1, 2, 4)))

我想获取以4开头的列表。

4 个答案:

答案 0 :(得分:1)

您使用filter遍历List并将谓词应用于每个列表,以检查第一个elem是否为4

示例:

scala> val (data, options) = (4, List(List(2, 4, 0, 2, 4), List(3, 4, 0, 2, 4), List(4, 0, 1, 2, 4)))
data: Int = 4
options: List[List[Int]] = List(List(2, 4, 0, 2, 4), List(3, 4, 0, 2, 4), List(4, 0, 1, 2, 4))

scala> options.filter(_.headOption.contains(data))
res0: List[List[Int]] = List(List(4, 0, 1, 2, 4))

另请参阅:Scala List.filter with two conditions, applied only once

答案 1 :(得分:0)

有几种方法。

这是另一个

listOfLists.collect{ case l @ 4 :: _ => l}

可能更强大,因为我们可以过滤前n个元素,例如

listOfLists.collect{ case l @ 4 :: 0 :: 1 :: _ => l}

答案 2 :(得分:0)

如果您有一个元组(Int, List[List[Int]]),并且想返回以开头提供的Int开头的列表,在这种情况下为4: 我建议您做这样的事情:

val myTuple = (4,List(List(2, 4, 0, 2, 4), List(3, 4, 0, 2, 4), List(4, 0, 1, 2, 4)))

myTuple._2.filter(_.headOption.contains(myTuple._1))

这将返回List(List(4, 0, 1, 2, 4))

我们在这里所做的是,我们首先通过执行List[List[Int]]访问元组中的myTuple._2,然后进行过滤以删除没有head值为4的列表-我们通过了输入为myTuple._1

请注意,我们使用headOption而不是head来获取List中的第一个元素,这是为了处理没有List包含开头提供的值的异常,在这种情况下,{{1 }}(有关更多详细信息,请参见http://www.bks2.com/blog/2012/12/31/head_vs_headOption/

答案 3 :(得分:0)

val t = (4, List(List(2, 4, 0, 2, 4), List(3, 4, 0, 2, 4), List(4, 0, 1, 2, 4)))
t._2.filter(_.head==t._1)

在REPL中:

scala> t._2.filter(_.head==t._1)
res5: List[List[Int]] = List(List(4, 0, 1, 2, 4))