list - 获取最大尺寸列表的有效方法

标签 list scala scala-collections

我有一个 scala 列表,其中包含一个字符串和一个整数列表。我只想过滤那些具有最大整数列表的值。通常的从最高和最低排序的方法,然后取 n 个字符串,有一个缺点。

var qq = List[(String,List[Int])]()

例如,一个长度为 10 的列表,有 6 个列表的大小为 65,其余 5 个列表的大小小于 65。现在我需要从向量中检索所有 6 个列表。

方法:传统的方法是对列表进行排序,获取最大列表的大小,并使用该大小添加过滤条件。

var max = qq.sortWith(_._2.size>_._2.size).head._2.size //get maximum size
var filList = qq.filter(p=>p._2.size>=max) //filter them

我的问题是有没有其他快速有效的方法可以在 scala 中做到这一点?因为我会使用更大的列表大小执行此过程大约 10,000-20,000 次。

最佳答案

为了性能,如果您只想要最大值,则不应对整个列表进行排序。

其次,在 Scala 中可以非常轻松地实现多线程代码:

  val data = List(("a", List(1, 2, 3)), ("b", List(4, 5)), ("c", List(45, 3, 2)))
  val maxListSize = data.par.map(_._2.size).max
  val largestLists = data.par.filter(_._2.size == maxListSize)
  println(largestLists)

只需添加.par(并行集合)即可成为多线程。请注意,除非您有非常大的列表,否则您可能需要删除这些 .par,因为它们可能会减慢速度。对于大型列表,并行化将提供一个加速因子,即计算机上的内核数量。

关于list - 获取最大尺寸列表的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22992208/

相关文章:

html - 使列表项包含图片和其下方的标签

windows - 如何检查输入是否已在列表中-批处理

scala - 在列表中使用自定义 Scala 类型

scala - 映射到相同类型时,Scala 的 map() 是否应该表现不同?

list - 在 Prolog 中将元素附加到列表的开头

python - 定期替换列表中的值

scala - 当我调用一个方法返回一个包含所述变量的案例类实例时,变量赋值会怎样?

java - 如何在 Java/Scala 中动态、递归地修饰一个类?

Scala的collection的sliding()在窗口大小大于step时不一致

scala - scala队列的最大长度