我完全坚持这一点。我的目标是创建一个方法,让我根据字符串的长度对数组进行排序。
我设法将其降序排序,但根据字符串大小无法排序。
def sort_by_length(anArray)
anArray.sort { |x,y| y <=> x }
end
a = ["twoish","one", "treeishish"]
sort_by_length(a)
答案 0 :(得分:2)
您可能想要使用:
def sort_by_length(anArray)
anArray.sort { |x,y| x.size <=> y.size }
end
a = ["twoish", "one", "treeishish"]
sort_by_length(a)
甚至更好
> ["twoish", "one", "treeishish"].sort_by(&:size)
=> ["one", "twoish", "treeishish"]
如果你有nil
值,你最好先压缩数组
> ["twoish", "one", "treeishish", nil].compact.sort_by(&:size)
=> ["one", "twoish", "treeishish"]
答案 1 :(得分:1)
def sort_by_length(array)
array.sort { |p,q| p.size <=> q.size }
end
无论如何,这个版本将以nil值打破。这将解决这个问题:
def sort_by_length(array)
array.sort { |p,q| p.try(:size) || 0 <=> q.try(:size) || 0 }
end
答案 2 :(得分:1)
arr = ["twoish","one", "treeishish"]
arr.sort_by {|x| x.length}
#=> ["one", "twoish", "treeishish"]
也:
arr.sort_by(&:length)
#=> ["one", "twoish", "treeishish"]
你尝试的方式应该是:
arr.sort{|x, y| x.length <=> y.length}
#=> ["one", "twoish", "treeishish"]