返回字符串中的最高和最低数字: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]

Demo

这使用String#gsub的形式,该形式具有一个参数且没有任何块,因此它返回一个我链接到Enumerable#reduce的枚举数(也称为inject)。 gsub因此仅生成正则表达式/-?\d+/的匹配项,并且不执行任何替换。

,

我对这个kata的解决方案

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"

一些关于方法的文档: String#split Array#map Array#minmax Array#reverse Array#join

有关Symbol#to_proc

的更多信息

numbers.split.map(&:to_i)number.split.map { |p| p.to_i }

但是,我敢肯定,“ minmax_by(&:to_i)”看起来更好。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...