Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 数组排序的Nil类错误_Ruby - Fatal编程技术网

Ruby 数组排序的Nil类错误

Ruby 数组排序的Nil类错误,ruby,Ruby,当我试图缩短数组时,会出现如下错误: in `sort_by': undefined method `<=>' for nil:NilClass (NoMethodError) @@secarr=@@secarr.sort_by{ |hotelname, location, cuisine, price| hotelname } 'sort_by'中的:nil的未定义方法`:NilClass(NoMethodError) @@secarr=@@secarr.sort_按{酒店名称、

当我试图缩短数组时,会出现如下错误:

in `sort_by': undefined method `<=>' for nil:NilClass (NoMethodError)
@@secarr=@@secarr.sort_by{ |hotelname, location, cuisine, price| hotelname }
'sort_by'中的
:nil的未定义方法`:NilClass(NoMethodError)
@@secarr=@@secarr.sort_按{酒店名称、位置、菜肴、价格|酒店名称}
请解释一下,因为我是ruby的新手。

试试这个

期望您的数组如下所示

@secarr = ["hotelname", "location", "cuisine", "price"]
为了提升

@@secarr=@@secarr.compact.sort_by{ |secarr1,secarr2| secarr1 <=> secarr2 }
@@secarr=@@secarr.compact.sort_by{| secarr1,secarr2 | secarr1 secarr2}
下降

@@secarr=@@secarr.compact.sort_by{ |secarr1,secarr2| secarr2 <=> secarr1 }
@@secarr=@@secarr.compact.sort_by{| secarr1,secarr2 | secarr2 secarr1}

EDIT:我没有意识到,
sort\u by
可以在多维数组的块中接受多个参数。感谢sawa和Kelvin的评论

但是,如果数组是而不是一个数组数组(例如,如果它是一个字符串数组,其中字段由
\t
分隔),则使用带有多个参数的
排序依据将不起作用;它将引发您提到的错误

如果您的案例是一个字符串数组,其中字段由
\t
分隔(如您在删除的答案中所述),并且hotelname是第一个字段,则必须执行以下操作:

@@secarr = @@secarr.sort_by { |el| el.split(/\t+/)[0] }

您的代码是正确的,因为在
@@secarr
中的元素之间比较了
hotelname
。您遇到的错误消息表示
hotelname
有时为
nil
,无法进行比较。只能对包含
可枚举
模块的类进行比较。解决方案是,假设
hotelname
通常是一个字符串,将
放在
hotelname
之后

@@secarr = @@secarr.sort_by{|hotelname, location, cuisine, price| hotelname.to_s}

你能显示你的数组的值吗?不要创建答案,只需编辑你的帖子。我已经合并了你的未注册帐户。您现在可以编辑您的问题以提供其他信息,或使用“个人答案”下的“评论”功能进行其他澄清。请不要发布答案,除非它是问题的答案,堆栈溢出不是一个论坛。您的所有帐户(嗯,可能所有)都已合并在一起。另外,StackOverflow不是一个论坛;如果你有新问题,请提出新问题。如果您想在问题中包含更多信息,请。如果你想和回答过的人交流,你可以给他们留言。我不这么认为。试试
[[5,6],[1,2],[3,4]]。按{x,y}
排序。正如我所说,
排序不需要多个参数。我在IRB上尝试了您的代码,得到了nil:NilClass的
NoMethodError:undefined方法“”。Ruby 1.8.7.我认为sawa的意思是编写
[[5,6],[1,2],[3,4]]。按{x,y{x}
排序,这很有效,所以至少在有数组要“爆炸”的情况下,您可以传递超过1个参数。@Kelvin和@sawa,谢谢!现在我明白了!我将编辑我的答案。@Kelvin谢谢。这就是我的意思。-1如果其中一个被比较的值为零,则会产生完全相同的错误。对于sawa,我已经提到我在代理背后不允许session。这意味着你将无法登录。对于第二个问题,我诚实地回答我的问题,如果是由网站完成的,我不会更改我的名字或任何东西。好的。我现在知道您无法编辑,因为您是以其他用户身份登录的。但是根据Tim在上面的评论,你现在应该可以编辑了。