返回字符串中的最大值和最小值:Ruby

iezvtpos  于 2022-11-22  发布在  Ruby
关注(0)|答案(5)|浏览(199)

不知道我做错了什么,但我似乎是得到它可悲的错误。
问题是,你得到了一串以空格分隔的数字,你必须返回最大和最小的数字。
注意:所有数字都是有效的Int32,不需要验证它们。输入字符串中总是至少有一个数字。输出字符串必须是由一个空格分隔的两个数字,最大的数字在前面。

def high_and_low(numbers)
  # numbers contains a string of space seperated numbers 
  #return the highest and lowest number 
 numbers.minmax { |a, b| a.length <=> b.length }  
   

end

输出量:

`high_and_low': undefined method `minmax' for "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6":String
k7fdbhmy

k7fdbhmy1#

minmax没有为字符串实现。您需要先将字符串拆分为数组。但请注意,split将返回字符串数组,而不是数字,您需要在下一步中将字符串转换为整数(to_i)。
因为minmax返回的值的顺序与要求的顺序相反,所以需要用reverse旋转数组,然后只用join旋转那些带有空格的数字,以获得最终结果。

numbers = "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"

def high_and_low(numbers)
  numbers.split.minmax_by(&:to_i).reverse.join(' ')
end

high_and_low(numbers)
#=> "542 -214"
qxgroojn

qxgroojn2#

怎么样:

numbers_array = numbers.split(' ')
"#{numbers_array.max} #{numbers_array.min}"

如果你从一串数字开始,你可能需要在调用之后转换.to_i来拆分。
在这种情况下:

numbers_array = numbers.split(' ').map { |n| n.to_i }
"#{numbers_array.max} #{numbers_array.min}"
vngu2lb8

vngu2lb83#

当你从一个字符串开始时,你必须把它转换成一个数组,在它上面转换minmax。否则您将比较码位而不是数值。

def get_maxmin(string)
  string.split(' ')
        .map(&:to_i)
        .minmax
        .reverse
        .join(' ')
end
iszxjhcz

iszxjhcz4#

不需要将字符串转换为数组。
第一个
Demo
它使用String#gsub的形式,只有一个参数,没有块,所以它返回一个枚举数,我已经将它链接到Enumerable#reduce(a.k.a. inject)。因此,gsub只生成正则表达式/-?\d+/的匹配项,不执行任何替换。

8mmmxcuj

8mmmxcuj5#

我对这个形的解决方法

def high_and_low(numbers)
  numbers.split.map(&:to_i).minmax.reverse.join(' ')
end

Test.assert_equals(high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"), "542 -214")

#Test Passed: Value == "542 -214"

关于方法的一些文档:第一个
关于Symbol#to_proc的更多信息
numbers.split.map(&:to_i)number.split.map { |p| p.to_i }相同
但是“minmax_by(&:to_i)”看起来更好,我肯定地猜。

相关问题