我有一个数字如下的数组:
list1 = [50,2,99,1,958,9,6,80]
,我需要比较所有元素:逐位数字。 例如,比较“ 9”,“ 99”和“ 958”将很重要,因为我需要像这样在结尾处加上“ 99”:
list1 = [1、2、50、6、80、9、958、99]
Ruby对此有功能吗? 非常感谢您的帮助:)
答案 0 :(得分:3)
我认为您正在寻找的是这个
list1.sort_by(&:to_s)
因此,这将导致:
[50, 2, 99, 1, 958, 9, 6, 80].sort_by(&:to_s)
#=> [1, 2, 50, 6, 80, 9, 958, 99]
[50, 2, 1, 9].sort_by(&:to_s)
#=> [1, 2, 50, 9]
如果您想取消订单,可以执行以下操作:
[50, 2, 99, 1, 958, 9, 6, 80].sort_by(&:to_s).reverse
#=> [99, 958, 9, 80, 6, 50, 2, 1]
[50, 2, 1, 9].sort_by(&:to_s).reverse
#=> [9, 50, 2, 1]
您可以执行。join
来获取连接的字符串:
[50, 2, 1, 9].sort_by(&:to_s).reverse.join
#=> "95021"
答案 1 :(得分:2)
尝试一下:将String#<=>与Array#sort一起使用,将转换为字符串的值进行比较:
list1.sort { |a, b| a.to_s <=> b.to_s }
#=> [1, 2, 50, 6, 80, 9, 958, 99]
如果我理解了这个问题,即使输出的前三个元素使我对逻辑感到困惑。
答案 2 :(得分:-1)
要仅提取第一个数字,只需映射两次:
{{1}}
更新:我在下面链接的解决方案是不正确。这个问题并不像看起来那样简单。
旧答案如下:
但是,问题本身看起来很有趣,因此我尝试了一下-即从数字列表中形成最大可能的数字。 但是,我不想破坏您的乐趣,因此,这里是link to a gist that solves the problem through normalization,以防您感兴趣。