加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 按字典顺序排序

发布时间:2020-12-17 02:48:05 所属栏目:百科 来源:网络整理
导读:所以我想按字典顺序排列我的坐标数组.但我不知道该怎么做.数组中的每个元素都是一个Coordinate对象,其Fixnum字段为#x和#y. 我是Ruby的新手,并不一定了解排序??枚举. 它会是这样的吗? coordinate_array.sort! { |a,b| a.x == b.x a.y == b.y } 解决方法 首先
所以我想按字典顺序排列我的坐标数组.但我不知道该怎么做.数组中的每个元素都是一个Coordinate对象,其Fixnum字段为#x和#y.

我是Ruby的新手,并不一定了解排序??枚举.
它会是这样的吗?

coordinate_array.sort! { |a,b| a.x <==> b.x && a.y <==> b.y }

解决方法

首先,宇宙飞船操作符是< =>不是< ==>

其次,你没有正确地组合2个比较:比较的结果将是-1,0或1.这些都是真正的值和真正的&& foo只是foo,所以你的代码只能按y值排序

你可以把它写成

x_ordering = a.x <=> b.x
x_ordering == 0 ? a.y <=> b.y : x_ordering

但是数组已经实现< =>所以你可以做到

array.sort! { |a,b| [a.x,a.y] <=> [b.x,b.y]}

在每次比较中创建2个数组的费用更高,更清晰

你甚至可以这样做

array.sort_by! { |a| [a.x,a.y] }

哪个更清晰,但内存配置略有不同.这将创建一个数组,其原始值将替换为块返回的值,并使用它来对原始数组进行排序.

我通常会使用后一种版本,除非我有其他令人信服的理由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读