【问题标题】:Iterating over CompactBuffer- Spark and Scala迭代 CompactBuffer——Spark 和 Scala
【发布时间】:2021-07-01 18:31:34
【问题描述】:

我是 Scala 新手,熟悉 Python。我很难迭代 Iterator[String] 对象(紧凑缓冲区)。我试过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 )
        ^

有人可以帮我遍历这个列表吗?非常感谢

【问题讨论】:

    标签: scala iterator


    【解决方案1】:

    values_iterateIterable 的列表(另一个列表或其他东西),因此当您遍历它时,值是Iterable - 因此错误。你需要先.flatten它。

    另外,list_values:+ value 并没有真正做任何事情:List 是不可变的,它会返回一个带有附加值的新副本,但你会丢弃。 此外,循环中的 if 语句也无关紧要:您正在寻找循环中的最小值,但永远不要使用它。

    另一件事是附加到List 效率非常低(它是一个链表,所以附加到它是 O(n)),在代码中看到这样的东西通常是一个危险信号。

    最后,在 Scala 中,我们很少使用 var,而且几乎从不使用循环。

    一般来说,要创建一个平面的值列表,您只需执行 val list = pair._2.flatten。 要找到列表中的最小值,请执行list.min。 如果你想用参数中给定的值绑定它,那么你就做math.min(min, list.min)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 2015-01-14
      • 2013-04-27
      相关资源
      最近更新 更多