gpt4 book ai didi

arrays - 将 Scala 数组转换为唯一排序列表的有效方法

转载 作者:行者123 更新时间:2023-12-03 15:33:12 26 4
gpt4 key购买 nike

任何人都可以在 Scala 中优化以下语句:

// maybe large
val someArray = Array(9, 1, 6, 2, 1, 9, 4, 5, 1, 6, 5, 0, 6)

// output a sorted list which contains unique element from the array without 0
val newList=(someArray filter (_>0)).toList.distinct.sort((e1, e2) => (e1 > e2))

既然性能很关键,有没有更好的办法呢?

谢谢你。

最佳答案

这条简单的代码是迄今为止最快的代码之一:

someArray.toList.filter (_ > 0).sortWith (_ > _).distinct

但到目前为止,明显的赢家是 - 由于我的测量 - Jed Wesley-Smith。也许如果 Rex 的代码是固定的,它看起来会有所不同。

bench diagram

典型免责声明 1 + 2:
  • 我修改了代码以接受一个数组并返回一个列表。
  • 典型的基准考虑因素:
  • 这是随机数据,平均分布。对于 100 万个元素,我创建了一个 0 到 100 万之间的 100 万个整数数组。因此,或多或少的零,或多或少的重复,它可能会有所不同。
  • 这可能取决于机器等。我使用的是单核 CPU,Intel-Linux-32bit,jdk-1.6,scala 2.9.0.1

  • 这里是底层 benchcoat-code and the concrete code 生成图形(gnuplot)。 Y 轴:以秒为单位的时间。 X 轴:数组中的 100 000 到 1 000 000 个元素。

    更新:

    在发现 Rex 代码的问题后,他的代码与 Jed 的代码一样快,但最后一个操作是将他的 Array 转换为 List(以填充我的基准接口(interface))。使用 var result = List [Int] , 和 result = someArray (i) :: result加快了他的代码速度,因此它的速度大约是 Jed-Code 的两倍。

    另一个可能有趣的发现是:如果我按照过滤器/排序/不同 (fsd) => (dsf, dfs, fsd, ...) 的顺序重新排列我的代码,所有 6 种可能性都没有显着差异。

    关于arrays - 将 Scala 数组转换为唯一排序列表的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160037/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com