Codefights没有将String隐式转换为Integer

时间:2017-09-11 20:36:34

标签: ruby

这是一段代码:

def allLongestStrings(inputArray)
    array = Array.new
    inputArray.each do |i|
        if inputArray[i].length == inputArray.max.length
            array << inputArray[i]
        end
    end
    return array
end

inputArray = ["aba", "aa", "ad", "vcd", "aba"]

它表示&#34;没有将String隐式转换为整数&#34;我无法弄清楚。我做错了什么?

2 个答案:

答案 0 :(得分:2)

错误在这里:

if i.length == inputArray.max.length # i instead of inputArray[i]
  array << i
end

但我建议使用select:

input_array = ["aba", "aa", "ad", "vcd", "aba"]
max_length = input_array.max.length
input_array.select { |el| el.length == max_length }
#=> ["aba", "vcd", "aba"]

答案 1 :(得分:1)

访问ruby array issue 4525

的文档

你可以看到“i”不是数组的位置而是整个元素。

然后,正确的代码是:

if i.size== inputArray.max.size
  array << i
end

根据ruby样式指南,最好使用大小而不是长度https://ruby-doc.org/core-2.2.0/Array.html#method-i-each