如何对数字进行排序,好像它们是单词一样?

时间:2011-01-21 14:41:52

标签: ruby sorting

Ruby的Array#sort默认情况下按照它们的值排序这样的数字:

[11, 12, 13, 112, 113, 124, 125, 127]

我想对这样的数字进行排序,好像它们是按字母顺序排列的单词:

[11, 112, 113, 12, 124, 125, 127, 13]

我该怎么做? (最终,我想用Hash键做这个,所以如果你想以这种方式回答,那很好。)另外,这种类型的名称是否有名称?

3 个答案:

答案 0 :(得分:7)

你们都疯了)))我有一个这样的解决方案:

a.sort_by &:to_s

答案 1 :(得分:2)

好吧,一种方法是将所有值转换为字符串,然后将其转换回来。

a = [11, 12, 13, 112, 113, 124, 125, 127]
a = a.map(&:to_s).sort.map(&:to_i)
p a # => [11, 112, 113, 12, 124, 125, 127, 13]

答案 2 :(得分:1)

您可以pass in a block对接受两个参数的排序进行排序,并返回您自己定义的比较函数的结果。这个例子应该说明一切,但如果您有任何问题,请随时提出。

a = [11, 112, 113, 12, 124, 125, 127, 13]
new_a = a.sort do |x,y|
  "%{x}" <=> "%{y}"
end
puts new_a

注意:我怀疑你正在寻找这种解决方案的原因是因为你想要排序的对象不是Integer的核心。子类Integer可能值得和语义上更令人愉悦。虽然它显然会使实例化更难,但感觉更正确,至少对我而言。