返回字符串中的最高和最低数字:Ruby

  • 本文关键字:数字 Ruby 字符串 返回 ruby
  • 更新时间 :
  • 英文 :


不确定我做错了什么,但我似乎大错特错。

问题是,给你一个由空格分隔的数字串,并且必须返回最高和最低的数字。

注:所有数字都是有效的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 

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"

怎么样:

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}"

当您从字符串开始时,必须将其转换为数组才能对其强制执行minmax。此外,请确保通过在数组上投射.map(&:to_i)来比较整数;否则,您将比较代码点而不是数值。

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

不需要将字符串转换为数组。

def high_and_low(str)
str.gsub(/-?d+/).
reduce([-Float::INFINITY, Float::INFINITY]) do |(mx,mn),s|
n = s.to_i
[[mx,n].max, [mn,n].min]
end
end
high_and_low "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
#=> [542, -214]

演示

这使用了String#gsub的形式,它有一个参数,没有块,所以它返回一个枚举器,我已经将其链接到Enumerable#reduce(也称为inject(。因此CCD_ 11仅生成正则表达式CCD_。

我的这个卡塔的解决方案

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("我想看起来肯定更好。

最新更新