按降序对可枚举进行排序

发布于 2024-08-19 18:18:47 字数 244 浏览 9 评论 0原文

按降序对 Enumerable 进行排序的最佳方法是什么?

我一直在做 @array.sort.reverse@array.sort_by{|song| Song.title }.reverse

我想我可以做类似 @array.sort{|a, b| 的事情b.标题<=> a.title},但我发现这很难读而且很冗长。

What's the best way to sort an Enumerable in descending order?

I've been doing @array.sort.reverse or @array.sort_by{|song| song.title }.reverse

I suppose I could do something like @array.sort{|a, b| b.title <=> a.title}, but I find this hard to read and verbose.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断念 2024-08-26 18:18:47

Array.reverse 的性能并不是非常差。使用 @array.sort.reverse 的代价是额外的数组重复加上反向操作(n/2 个元素切换)。所以是的,如果你认为读起来更清楚的话,我认为这应该是可以接受的。

有关详细信息,请参阅其来源。而且,我认为使用 @array.sort.reverse 确实提供了“稍微”更好的可读性(但无论如何都不难阅读)。

The performance of Array.reverse is not very bad. What costs you by using @array.sort.reverse is an extra array duplication plus the reverse (n/2 element switches). So yes, I think that should be acceptable if you think it's read clearer.

See its source for details. And also, I think using @array.sort.reverse does provide 'slightly' better readability (but it's not very hard to read any way).

执笔绘流年 2024-08-26 18:18:47

我不确定这是否比 Wayne Conrad 的自我描述的“明显的垃圾, " 但您可以将 Enumerable#sort_by_descending 定义为 然后

Enumerable.class_eval do
  def sort_by_descending(&block)
    sort { |a, b| block.bind(b).call <=> block.bind(a).call }
  end
end

按如下方式调用它:

@songs.sort_by_descending(&:title)

I'm not sure whether this works any better than Wayne Conrad's self-described "obvious piece of junk," but you could define Enumerable#sort_by_descending as

Enumerable.class_eval do
  def sort_by_descending(&block)
    sort { |a, b| block.bind(b).call <=> block.bind(a).call }
  end
end

Then call it as follows:

@songs.sort_by_descending(&:title)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文