如何按字母顺序对数组进行排序?

14

我在语法方面遇到了麻烦,尝试了一些方法但还是无法正确理解。我是哪里没有理解对吗? 谢谢

change = ['cents', 'pennies', 'coins', 'dimes', 'pence', 'quarters']
change.sort {|anythinghere| a <=> b puts "Ascending #{anythinghere}" }

谢谢!那么我该如何在终端中显示它呢? - Stacca
3个回答

33

为什么不直接使用 change.sort 呢?没有传入块的 Array#sort 默认进行升序排序,这等价于传入块 { |a, b| a <=> b }

sorted = change.sort # Ascending sort
sorted = change.sort { |a, b| a <=> b } # Same thing!
sorted
# => ["cents", "coins", "dimes", "pence", "pennies", "quarters"]

请注意,此代码块需要考虑您正在比较的两个变量,与您在问题中编写的代码块不同。只有在希望修改元素排序方式时才需要包括自定义比较器,例如,如果您想按降序排序:{ |a,b| b <=> a }

如果您想打印数组的文本表示,请使用:

puts sorted

如果您想就地排序(而不是创建一个新数组),请使用sort!


谢谢。有没有什么办法可以显示它? - Stacca
如果你在脚本中想要输出数组的文本表示,可以在保存排序后使用 puts,即 puts sorted - jayelm
谢谢你的帮助! - Stacca

0

coins = ['分', '便士', '硬币', '十分钱', '便士', '二十五美分']

coins.sort!

硬币数量为 p

将变量名从 "change" 更改以避免 Ruby 魔法


-3
使用 sort_by 方法:
change = ['cents', 'pennies', 'coins', 'dimes', 'pence', 'quarters']
change.sort_by { |change| change }
# => ["cents", "coins", "dimes", "pence", "pennies", "quarters"] 

1
如果您想修改当前的数组,请使用 sort_by! - Guilherme Carlos
1
为什么你推荐使用带有块的 sort_by 而不是 sort 呢?首先,它不会那么快。 - Cary Swoveland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接