基于 if 语句的 Ruby 排序

标签 ruby sorting

我正在尝试通过一组疯狂的规则对 Ruby 1.8.7 中的单词数组进行排序。这可以简化为想要对不区分大小写的 .sort_by{|a| 进行排序a.downcase} 然后重新排序区分大小写,但前提是 2 个字符串相同。

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

这是我所拥有的:

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

期望的输出:

["A", "a", "A.", "a.", "Ba", "ba"]

感谢您的帮助。

最佳答案

如果a.downcase == b.downcase那么您想使用区分大小写的比较进行排序,对吗?这真的意味着你想按对排序 [a.downcase, a]和 Ruby 中的数组逐个元素进行比较,因此您只需要:

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

假设 sort_by正在比较两个数组 a1a2看看哪个先走。那只是一个 a1 <=> a2称呼。如果a1[0] != a2[0]那么飞船运算符(operator)就不必查看数组的第二个元素来打破平局,因为没有平局并且<=>可以回+1-1马上。如果a1[0] == a2[0]然后a1[0] <=> a2[0]0并且宇宙飞船必须查看第二个元素以了解如何打破平局(或者如果 a1 == a2 则保持平局不变)。这听起来像是您所追求的比较逻辑。

关于基于 if 语句的 Ruby 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001024/

相关文章:

Java 比较器compareToIgnoreCase

ruby-on-rails - ruby on rails 中的未定义方法 ‘authenticate'?

ruby - 迭代特定范围的哈希

ruby-on-rails - Rails,在哪里存储 Google Client API 的 JSON 凭据以及如何访问它?

ruby - 指定 TLSv1 时 SSLv3 证书验证失败?

php - MYSQL 是这个 JOIN 太冗长还是这是唯一的方法?排序不起作用

ruby - RSpec NoMethodError : "undefined method ` describe' for main Object"

javascript - 按特定字符串顺序对对象的 Javascript 数组进行排序?

python - 有没有办法在找到第一个排序的 k 元素之前在 python 中对列表进行排序?

sorting - Gnumeric Sort 函数