当我试图缩短数组时,我收到如下错误:
in `sort_by': undefined method `<=>' for nil:NilClass (NoMethodError)
@@secarr=@@secarr.sort_by{ |hotelname, location, cuisine, price| hotelname }
请解释,因为我是红宝石的新手。
答案 0 :(得分:1)
您的代码是正确的,hotelname
正在@@secarr
中的元素进行比较。您遇到的错误消息表示hotelname
(有时)nil
,无法进行比较。只能在包含Enumerable
模块的类上进行比较。解决方案是假设hotelname
通常是一个字符串,将to_s
放在hotelname
之后。
@@secarr = @@secarr.sort_by{|hotelname, location, cuisine, price| hotelname.to_s}
答案 1 :(得分:0)
试试这个!
期待您的阵列看起来像这样。
@secarr = ["hotelname", "location", "cuisine", "price"]
升序
@@secarr=@@secarr.compact.sort_by{ |secarr1,secarr2| secarr1 <=> secarr2 }
降序
@@secarr=@@secarr.compact.sort_by{ |secarr1,secarr2| secarr2 <=> secarr1 }
答案 2 :(得分:-1)
sort_by
可以在块中为多维数组接受多个参数。感谢sawa和Kelvin的评论。
但是,如果数组不是数组数组(例如,如果它是字符串数组,其中字段由\t
分隔),则使用sort_by
不止一个论点不起作用;它会引起你提到的错误。
如果您的案例是一个字符串数组,其中字段以\t
分隔(当您输入已删除的答案时),并且hotelname是第一个字段,则必须执行以下操作:
@@secarr = @@secarr.sort_by { |el| el.split(/\t+/)[0] }