arrays - 为什么我不能将数字作为字符串更改为整数?

标签 arrays ruby string integer

我正在做一个卡塔,它要求我将两个数字字符串(例如“1 2 3 4 5 6”)更改为整数,将这些整数相加,然后确定哪个值较大以打印出信息。 这是我到目前为止所拥有的:

def goodVsEvil(good, evil)
 goodarr = []
 evilarr = []

 goodarr.push(good.split(" "))
 evilarr.push(evil.split(" "))

 goodarr.each{|n| n.to_i}
 evilarr.each{|n| n.to_i}

 goodsum = goodarr.inject(:+)
 evilsum = evilarr.inject(:+)

 if goodsum > evilsum
   return "Battle Result: Good triumphs over Evil"
 elsif goodsum < evilsum
   return "Battle Result: Evil eradicates all trace of Good"
 elsif goodsum = evilsum
   return "Battle Result: No victor on this battle field"
 end
end

我将字符串拆分为单独的数字并将它们放入各自的数组中,但我需要将它们转换为整数,解释器不会将 .to_i 方法识别为有效方法. 我该如何解决或我哪里错了?

最佳答案

这里至少有三个错误:

goodarr.push(good.split(" "))

这并不像您认为的那样。在这里,您只向数组添加一个元素,该元素是调用 split 的结果数组:

goodarr => [["1", "2", "3", "4", "5", "6"]]

这意味着数组中的每个元素都是一个数组,没有to_i方法。

你应该这样做:

goodarr = good.split(" ")

goodarr = good.split # use spaces by default

第二个错误是:

goodarr.each{|n| n.to_i}

这段代码完全没有副作用。 block 返回的值不存储在任何地方。您需要使用 map! 代替:

goodarr.map!{|n| n.to_i}

最后一个错误是使用赋值运算符 =,而您实际上想使用等于运算符 == 来比较值是否相等。

关于arrays - 为什么我不能将数字作为字符串更改为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36200713/

相关文章:

arrays - 数组通常在较低级别上如何工作?

ruby-on-rails - Ruby 中可观察到的模式冗余

java - 字符串文字、实习和反射

c# - .NET 正则表达式分组 : Exclude String from group

c# - 帮助制作一个好的正则表达式?

javascript - 如何将对象中的字符串值转换为数字?

复制 C 中的字符串数组错误

ruby-on-rails - Geokit-rails 插件 - 无法在返回的 GeoLoc 对象上调用 to_json,给出循环引用错误

ruby-on-rails - Errno::EPERM:不允许操作@dir_s_rmdir

c - 数组与指向指针的指针