我有表达整数值字符串数组:字符串数组排序没有它们转换成整数
array = ["0934", "123", "934", "0123"]
我想不转换字符串成整数数组排序。 预期的输出是:
array = ["0123", "123", "0934", "934"]
请建议我该如何做到这一点。
我有表达整数值字符串数组:字符串数组排序没有它们转换成整数
array = ["0934", "123", "934", "0123"]
我想不转换字符串成整数数组排序。 预期的输出是:
array = ["0123", "123", "0934", "934"]
请建议我该如何做到这一点。
如果不能Array#sort_by!的块中的字符串转换为整数,可以垫琴弦向左用零(使用String#rjust),所以它们是所有相同的长度,然后排序在这些填充字符串。
n = array.map(&:size).max
#=> 4
array.sort_by! { |s| s.rjust(n, '0') }
#=> ["123", "0123", "0934", "934"]
注
array.map { |s| s.rjust(n, '0') }
#=> ["0934", "0123", "0934", "0123"]
感谢您的回答,这是我想要的。 –
我认为这将这样的伎俩
array.sort_by!(&:to_i)
它是那么容易,因为这样的:
array.sort
# => ["0123", "0934", "123", "934"]
顺便说一句,你预期的答案是错的。
编辑
好吧,我想我终于得到了你的意图。也就是说,您希望数组按照读取元素所产生的值排序,然后按照长度的降序进行排序。
array.sort_by{|e| [e.to_f, -e.length]}
# => ["0123", "123", "0934", "934"]
来吧,你需要从第一个地方写这样的问题。不要指望许多人能够通过阅读不同的线路来达到这种不平凡的要求。
请再次检查问题,因为预期的输出是 [“0123”,“123”,“0934”,“934”] –
我认为OP希望排序的字符串's'在's.to_i'顺序,但不希望在排序操作中将字符串转换为整数。 –
@CarySwoveland与OP声明不希望转换为整数的说法相抵触。 – sawa
考虑到''0123“.to_i#=> 123'和'”123“.to_i#=> 123',为什么你的”预期输出“在”123“'前面有'0123'? –
你的分类背后的逻辑是什么? – sawa
你的问题有点不清楚。我认为你的意思可能是这样的:“我想对字符串数组进行排序(就地),以便如果结果数组的元素被转换为整数,它们将以[数字顺序](https://www.reference .com/math/meaning-numerical-order-7099285d76ee357b),但我不想在排序操作中将字符串转换为整数“。 –