Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
基于if语句的Ruby排序_Ruby_Sorting - Fatal编程技术网

基于if语句的Ruby排序

基于if语句的Ruby排序,ruby,sorting,Ruby,Sorting,我试图用一套疯狂的规则对Ruby 1.8.7中的一组单词进行排序。这可以简化为希望对不区分大小写的进行排序。按{a | a.downcase}对u进行排序,然后重新排序区分大小写,但前提是这两个字符串相同 我认为您可以只.downcase比较相等的字符串,然后对它们进行排序,其余的发送0。但是不,这对我不起作用 以下是我所拥有的: ["A", "a", "a.", "A.", "Ba", "ba"].sort_by{|a| a.downcase}.sort{|a,b| a.downcase==b

我试图用一套疯狂的规则对Ruby 1.8.7中的一组单词进行排序。这可以简化为希望对不区分大小写的
进行排序。按{a | a.downcase}
对u进行排序,然后重新排序区分大小写,但前提是这两个字符串相同

我认为您可以只
.downcase
比较相等的字符串,然后对它们进行排序,其余的发送0。但是不,这对我不起作用

以下是我所拥有的:

["A", "a", "a.", "A.", "Ba", "ba"].sort_by{|a| a.downcase}.sort{|a,b| a.downcase==b.downcase ? a<=>b : 0 }

谢谢您的帮助。

如果
a.downcase==b.downcase
那么您希望使用区分大小写的比较进行排序,对吗?这实际上意味着您需要按对排序,Ruby中的数组逐元素比较,所以您只需要:

array.sort_by { |s| [ s.downcase, s ] }

假设
sort\u by
正在比较两个数组
a1
a2
,看哪一个先到。那只是一个
a1a2
呼叫。如果
a1[0]!=a2[0]
那么宇宙飞船操作员不必查看阵列的第二个元素来打破平局,因为没有平局,
可以立即返回
+1
-1
。如果
a1[0]==a2[0]
,那么
a1[0]a2[0]
就是
0
,宇宙飞船必须查看第二个元素,看看如何打破这种联系(或者如果
a1==a2
,就保持这种联系)。这听起来像是您所追求的比较逻辑。

其中使用数组按多个条件排序是我以前从未见过的想法。这很有帮助。这是对这个问题的一个很好的回答。这正是我提出的问题所需要的答案,谢谢。我必须补充一点,我很难过,因为我发布这篇文章是为了修复我的
a.downcase==b.downcase
方法,而你的回答让我以完成工作所需的方式重新思考我的问题,所以我很高兴给你打勾。不幸的是,现在这个问题感觉像是所有这些问题的复制品:为此,我向最终将这个问题标记为复制品的任何人道歉。
array.sort_by { |s| [ s.downcase, s ] }