您好,我是scala的新手,并且对此表示怀疑,我有一个看起来像这样的列表
(4,List(List(2, 4, 0, 2, 4), List(3, 4, 0, 2, 4), List(4, 0, 1, 2, 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))