Scala 在筛选器匹配之前获取项目
要筛选我使用的项目列表,请执行以下操作:Scala 在筛选器匹配之前获取项目,scala,Scala,要筛选我使用的项目列表,请执行以下操作: val l : List[String] = List("1","a","2","b") l.filter(c => c.contains("b")).foreach(println) 但是如何访问在匹配项之前出现的项?那么在这种情况下,访问“2”吗 更新: List("1","a","2","b","3","b","4","b") filtering on "b" returns List("2","3","4") filteri
val l : List[String] = List("1","a","2","b")
l.filter(c => c.contains("b")).foreach(println)
但是如何访问在匹配项之前出现的项?那么在这种情况下,访问“2”吗
更新:
List("1","a","2","b","3","b","4","b")
filtering on "b" returns
List("2","3","4")
filtering on "a" returns
List("1")
您的描述有点含糊不清,但我认为您需要在第一个匹配之前出现的元素的列表-例如,第一个包含“b”的元素之前的所有元素 如果是,请使用
takeWhile
scala> val l = List("1","a","2","b")
l: List[String] = List(1, a, 2, b)
scala> l takeWhile {! _.contains("b")}
res0: List[String] = List(1, a, 2)
如果您想要显示在包含“b”的第一个元素之前的元素:
您的描述有点含糊不清,但我认为您需要在第一个匹配之前出现的元素的列表-例如,第一个包含“b”的元素之前的所有元素 如果是,请使用
takeWhile
scala> val l = List("1","a","2","b")
l: List[String] = List(1, a, 2, b)
scala> l takeWhile {! _.contains("b")}
res0: List[String] = List(1, a, 2)
如果您想要显示在包含“b”的第一个元素之前的元素:
如果您正在查找在包含“b”的项之前出现的所有项的列表:
如果您正在查找在包含“b”的项之前出现的所有项的列表:
我想这就是你想要的:
val x = l.tail.foldLeft(l.head, (List.empty[(String, String)]))((x,c) => if(c.contains("b")) (c, (x._1, c):: x._2) else (c, x._2))._2
val ans = if(l.head.contains("b")) (null, l.head.contains("b")) :: x else x
将输出作为
列表((2,b))
我想这就是你想要的:
val x = l.tail.foldLeft(l.head, (List.empty[(String, String)]))((x,c) => if(c.contains("b")) (c, (x._1, c):: x._2) else (c, x._2))._2
val ans = if(l.head.contains("b")) (null, l.head.contains("b")) :: x else x
将输出作为列表((2,b))
这里有一个解决方案
代码:
这里有一个解决方案
代码:
如何使用滑动和平面贴图进行此操作
val list = List("1", "2", "b", "3", "b", "b")
val target = "b"
list.sliding(2).flatMap{
case Seq(x,y) => if(y == target) Some(x) else None
case _ => None
}.toSeq
如何使用滑动和平面贴图进行此操作
val list = List("1", "2", "b", "3", "b", "b")
val target = "b"
list.sliding(2).flatMap{
case Seq(x,y) => if(y == target) Some(x) else None
case _ => None
}.toSeq
你到底想做什么?
val l=List(“1”、“2”、“b”、“3”、“b”、“b”、“b”)
的结果应该是什么?@Kolmar的更新是否让它更清晰?val l=List(“1”、“2”、“b”、“3”、“b”、“b”)应该只返回List(“2”、“3”、“b”)您到底想做什么?val l=List(“1”、“2”、“b”、“3”、“b”、“b”、“b”)
的结果应该是什么?@Kolmar的更新是否让它更清晰?val l=List(“1”、“2”、“b”、“3”、“b”、“b”)应该只返回List(“2”、“3”、“b”)