如何在 Scala 中查找集合中的连续元素
How to find consecutive elements in a collection in Scala
我正在尝试找到一种方法,根据位于第一个位置的所需元素,在 Scala 的集合中查找连续元素。
我想通过函数式编程来实现这一点,所以我正在努力想出一种方法。
基本上,我有一个列表 foo
,它可以包含 A
、B
或 C
。 'A' 是所需的值,因此 'A' 必须是第一个,否则,结果 bar
应该为空。
从 first 元素,我需要提取连续的元素,直到元素值发生变化,然后创建一个新列表 bar
其中包含不同元素之前的元素序列。
例如,我想做的是
List('A', 'A', 'B', 'C', 'A', 'B') => List('A', 'A')
同时,如果第一个元素不是A,那么得到的List应该是空的
List('B', 'A', 'A', 'C') => List()
我尝试在列表 foo
上应用 foreach
并检查当前元素是否是将其添加到列表中所需的元素,但由于 Scala 的不可变性(我知道你可以使用可变但我宁愿不使用)我不知道如何跟踪以前的元素并输出集合
如果第一个元素必须始终是 A
,那么 takeWhile
就是您想要的。
scala> List('A', 'A', 'B', 'C', 'A', 'B').takeWhile(_ == 'A')
val res3: List[Char] = List(A, A)
您可以使用 takeWhile
:
list.headOption()
.map(el => list.takeWhile(_ == el))
.getOrElse(List())
如果您只想要 'A'
,那么您可以将代码减少到只有中间一行,如 Brian 的回答。
我正在尝试找到一种方法,根据位于第一个位置的所需元素,在 Scala 的集合中查找连续元素。 我想通过函数式编程来实现这一点,所以我正在努力想出一种方法。
基本上,我有一个列表 foo
,它可以包含 A
、B
或 C
。 'A' 是所需的值,因此 'A' 必须是第一个,否则,结果 bar
应该为空。
从 first 元素,我需要提取连续的元素,直到元素值发生变化,然后创建一个新列表 bar
其中包含不同元素之前的元素序列。
例如,我想做的是
List('A', 'A', 'B', 'C', 'A', 'B') => List('A', 'A')
同时,如果第一个元素不是A,那么得到的List应该是空的
List('B', 'A', 'A', 'C') => List()
我尝试在列表 foo
上应用 foreach
并检查当前元素是否是将其添加到列表中所需的元素,但由于 Scala 的不可变性(我知道你可以使用可变但我宁愿不使用)我不知道如何跟踪以前的元素并输出集合
如果第一个元素必须始终是 A
,那么 takeWhile
就是您想要的。
scala> List('A', 'A', 'B', 'C', 'A', 'B').takeWhile(_ == 'A')
val res3: List[Char] = List(A, A)
您可以使用 takeWhile
:
list.headOption()
.map(el => list.takeWhile(_ == el))
.getOrElse(List())
如果您只想要 'A'
,那么您可以将代码减少到只有中间一行,如 Brian 的回答。