迭代 CompactBuffer——Spark 和 Scala
Iterating over CompactBuffer- Spark and Scala
我是 Scala 新手,熟悉 Python。我努力迭代 Iterator[String] 对象(Compact Buffer)。我已经尝试过 foreach 方法但没有成功。
这是我的代码:
def CCF_Iterate(pair : (String, List[Iterable[String]]) ) = {
var key = pair._1
var values_iterate = pair._2
var min = pair._1
val list_values = List.empty[String]
for (value <- values_iterate) {
if (min > value ) {
min = value}
list_values:+ value
}
我收到此错误消息:
found : Iterable[String]
required : String
if (min > value )
^
有人可以帮我遍历这个列表吗?非常感谢
values_iterate
是 Iterable
的列表(另一个列表或其他列表),因此当您遍历它时,值是 Iterable
- 因此是错误。您需要先 .flatten
它。
此外 list_values:+ value
并没有真正做任何事情:List
是不可变的,它 returns 你是一个带有附加值的新副本,但你丢弃了。
此外,循环中的 if
语句也无关紧要:您正在寻找循环中的最小值,但永远不要使用它。
另一件事是附加到 List
是非常低效的(它是一个链表,所以附加到它是 O(n)),在代码中看到这样的东西通常是一个危险信号.
最后,在 scala 中我们很少使用 var
,而且几乎从不使用循环。
一般来说,要创建一个简单的值列表,您只需
val list = pair._2.flatten
。
要找到列表中的最小值,您可以执行 list.min
。
如果你想用参数中给定的值绑定它,那么你做 math.min(min, list.min)
我是 Scala 新手,熟悉 Python。我努力迭代 Iterator[String] 对象(Compact Buffer)。我已经尝试过 foreach 方法但没有成功。
这是我的代码:
def CCF_Iterate(pair : (String, List[Iterable[String]]) ) = {
var key = pair._1
var values_iterate = pair._2
var min = pair._1
val list_values = List.empty[String]
for (value <- values_iterate) {
if (min > value ) {
min = value}
list_values:+ value
}
我收到此错误消息:
found : Iterable[String]
required : String
if (min > value )
^
有人可以帮我遍历这个列表吗?非常感谢
values_iterate
是 Iterable
的列表(另一个列表或其他列表),因此当您遍历它时,值是 Iterable
- 因此是错误。您需要先 .flatten
它。
此外 list_values:+ value
并没有真正做任何事情:List
是不可变的,它 returns 你是一个带有附加值的新副本,但你丢弃了。
此外,循环中的 if
语句也无关紧要:您正在寻找循环中的最小值,但永远不要使用它。
另一件事是附加到 List
是非常低效的(它是一个链表,所以附加到它是 O(n)),在代码中看到这样的东西通常是一个危险信号.
最后,在 scala 中我们很少使用 var
,而且几乎从不使用循环。
一般来说,要创建一个简单的值列表,您只需
val list = pair._2.flatten
。
要找到列表中的最小值,您可以执行 list.min
。
如果你想用参数中给定的值绑定它,那么你做 math.min(min, list.min)