这是我的数组:array = ["1", "Hel", "6", "3", "lo" ]
我想输出数组中最小的数字。那我想输出数组中最大的数字?我该如何实现这一目标?谢谢!
答案 0 :(得分:3)
这取决于您希望如何处理不容易解析为数字的字符串元素。喜欢" Hel"和" lo"。
如果你这样做:
array.map {|x| Integer(x) rescue nil }.compact.min
array.map {|x| Integer(x) rescue nil }.compact.max
然后你会忽略那些,这可能是正确的,假设你没有理由考虑" Hel"和" lo"有数值。
答案 1 :(得分:1)
numbers = array.select { |x| x[/^-?\d+$/] }.map(&:to_i)
# => [1, 6, 3]
numbers.min
# => 1
numbers.max
# => 6
答案 2 :(得分:1)
使用负数的另一种变体
smalles, largest =
["1", "Hel", "6", "3", "lo","-9" ].select { |x| x[/^-?\d+$/] }.minmax_by(&:to_i)
最小的#=> -9最大#=> 6
答案 3 :(得分:0)
smallest, largest =
["1", "Hel", "6", "3", "lo" ].reject{|s| s =~ /\D/}.minmax_by(&:to_i)
smallest # => "1"
largest # => "6"
答案 4 :(得分:0)
另一种方式:
array.join(',').scan(/-?\d+/).minmax_by(&:to_i)
#=> ["-4", "6"]
答案 5 :(得分:0)
我们可以使用unicode [[:digit:]]代替编写正则表达式 。array.join( '')扫描(/ [[:位:]] /)minmax_by(安培;:to_i)。