我正在使用ruby 1.9.3并使用
从文本文件中读取数字or_rating = line.scan((/\d+/)).map(&:to_i)
然后我用
读了另一个数字offrating = line.scan((/\d+/)).map(&:to_i)
然后尝试进行比较
if offrating - 1 <= or_rating then...
但我收到此错误
can't convert Fixnum into Array (TypeError)
我发现的大多数答案都是指我尝试过的to_i
映射(上图),但我无法让它工作。
答案 0 :(得分:2)
您的offrating
是一个数组而or_rating
是另一个数组。
你正在尝试
Array - FixNum <= Array
所以你得到错误,因为它试图将1(FixNum)转换为Array
来做-
和比较
如果您希望offrating
和or_rating
始终返回单个元素数组,那么您可以这样做,
offrating[0] - 1 <= or_rating[0]
答案 1 :(得分:0)
scan
返回一个数组。您遇到的问题是offrating - 1
部分。
它试图从Array
中减去数字1。如果你添加索引器,就像这样
if offrating[0] - 1 <= or_rating[0]
它可以摆脱错误,但我不知道这是否会给你你想要的结果。
答案 2 :(得分:0)
tcshao和JSWorld说的是 - 你从表达式中得到一个数组 - 字符串中的数字数组。看起来像你想要的:
line.scan(/\d+/).map(&:to_i).each_slice(2).select{ |or_rating, offrating|
offrating - 1 <= or_rating
}.each{ |or_rating, offrating|
puts "Your Code Here"
}
或者您可以在块中使用if
而不是select
。