我有一个 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/