Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在筛选器匹配之前获取项目_Scala - Fatal编程技术网

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”)