gpt4 book ai didi

基于 if 语句的 Ruby 排序

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

我正在尝试通过一组疯狂的规则对 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/

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