Ruby-如何隔离数组中每个元素的第一位?

时间:2019-04-15 17:44:16

标签: arrays ruby compare element digits

我有一个数字如下的数组:

list1 = [50,2,99,1,958,9,6,80]

,我需要比较所有元素:逐位数字。 例如,比较“ 9”,“ 99”和“ 958”将很重要,因为我需要像这样在结尾处加上“ 99”:

list1 = [1、2、50、6、80、9、958、99]

Ruby对此有功能吗? 非常感谢您的帮助:)

3 个答案:

答案 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,以防您感兴趣。