根据字符串大小对数组进行排序

时间:2014-12-22 08:48:29

标签: ruby-on-rails ruby

我完全坚持这一点。我的目标是创建一个方法,让我根据字符串的长度对数组进行排序。

我设法将其降序排序,但根据字符串大小无法排序。

def sort_by_length(anArray)
  anArray.sort { |x,y| y <=> x }
end

a = ["twoish","one", "treeishish"]
sort_by_length(a)

3 个答案:

答案 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"]
相关问题