Почему я не могу получить длину массива каждой строки в массиве?

#ruby #arrays

#рубиновый #массивы #ruby

Вопрос:

Я пытаюсь выяснить, как получить длину значения массива (индекс?) По какой-то причине он возвращает 1,0,0, и я не знаю, почему. Кто-нибудь может объяснить, что я делаю неправильно, пожалуйста? К вашему сведению, это от RubyMonk. Я пытаюсь решить эту проблему, не получив ответа .. просто нужно немного повысить, чтобы понять, что я делаю не так

 def length_finder(input_array)
 output= []
   input_array.length.times do |x|
    output << input_array.length[x]
   end
 return output
end
  

Комментарии:

1. Возможно, вы также захотите попробовать Array.each , что является более чистым способом перебора элементов (хотя хвала умному использованию times )

2. Вам нужна длина массива или длина каждого элемента в массиве?

Ответ №1:

Разве это не должно быть:

 output << input_array[x].length
  

Здесь вы используете метод ссылки на бит.

Еще немного стиля Ruby:

 def length_finder(input_array)
  input_array.map(amp;:length)
end
  

Ответ №2:

Это очень сложно и совсем не идиоматично. Попробуйте это:

 def length_finder(input_array)
  input_array.map { |x| x.size }
end
  

Это должно дать вам новый массив с размером каждого дочернего массива в качестве элемента.

Комментарии:

1. хороший ответ, 1 за добавленное значение

2. Неплохо.. но OP не хотел ответа на ответ, просто исправил свой вопрос 🙂

Ответ №3:

 def length_finder(input_array)
  output = []
  input_array.each do |x|
    output << x.length
  end
  return output
end

my_array = length_finder(["first", "second", "third", "forth"])