gpt4 book ai didi

ruby-on-rails - 检查数组是否可排序

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:48 24 4
gpt4 key购买 nike

排序数组时有没有办法避免这个错误?

 ArgumentError: comparison of Hash with Hash failed

我正在寻找这样的东西:

a.sort if a.is_sortable?

最佳答案

排序通常是根据 Comparable :

The Comparable mixin is used by classes whose objects may be ordered. The class must define the <=> operator, which compares the receiver against another object, returning -1, 0, or +1 depending on whether the receiver is less than, equal to, or greater than the other object.

所以你可以看看:

a.grep(Comparable)

看看它的长度是否与a相同.或者你可以说:

a.all? { |e| e.is_a? Comparable } 

但你真的不需要所有的Comparable对于 #sort工作,你只需要一个<=>方法所以你可以说:

a.all? { |e| e.respond_to? :<=> }

当然,以上所有假设a的所有元素和<=>一样吗?是相关的(即 x <=> y 适用于 x 的任意两个条目 ya )并且即使 a 的所有元素也不一定如此是 Comparable s 或者即使他们都响应 <=> .我们还假设 <=>已正确实现,但如果您对宇宙飞船运算符(operator)的实现不当,那么无论如何所有赌注都会被取消。

对于任意数组 a ,判断能不能排序的唯一方法就是尝试排序,看看它会不会爆炸。对于您对元素了解更多的数组(即元素都是同一类的所有实例),您有一些选择。

关于ruby-on-rails - 检查数组是否可排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52010680/

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