#arrays #ruby
#массивы #ruby
Вопрос:
При разборе CSV-файла мне нужно объединить поля строки в массив, начиная с 4-го поля (3-й элемент массива). Я хочу манипулировать каждой строкой, как в примере ниже: Исходный массив:
array1 = [1,2,3,4,5]
Изменен массив:
array2 = [1,2,3,[4,5]]
Мой код здесь:
array1[0..2].push(array1[3..array1.length])
=> [1, 2, 3, [4, 5]]
Мой вопрос: есть ли лучший / более чистый / простой способ преобразовать часть массива в подмассив?
Ответ №1:
Есть! Вы можете сделать это a = a[0..2] [a[3..-1]]
. В ruby
может использоваться для объединения массивов. Кроме того, n..-1
предоставляет вам элементы n
в конец массива. В качестве предостережения,
это медленнее и дороже, чем concat
поэтому, если бы вы сделали a[0..2].concat([a[3..-1])
, это было бы дешевле и быстрее.
Комментарии:
1. На самом деле, я только что понял, что мне нужно, чтобы результирующий массив был таким;
["1", "2", "3", [4, 5]]
— преобразовать строку в целое число для подмассива. Используя ваше предложение, мой код выглядит следующим образом:2.
a = ["1","2","3","4","5"]
a = a[0..2].concat([a[3..-1].map(amp;:to_i)])
можно ли это улучшить? Извините, я, кажется, могу отредактировать этот комментарий3. Что означает «дешевле» в «дешевле и быстрее»? Вы также могли бы написать
a[0..2] << a[3..-1]
.4. Кстати, читайте профиль @Cary Awesome 😉 не могли бы вы прокомментировать мой комментарий? есть ли лучший способ преобразовать подмассив в целые числа?
a = ["1","2","3","4","5"] a = a[0..2].concat([a[3..-1].map(amp;:to_i)])
кажется, в Ruby всегда есть другой способ.5. @CarySwoveland «дешевле» означает меньшую нагрузку на память.
a b
создает новый массив, поэтому трем массивам выделена память, тогда какa.concat(b)
объединяетсяb
вa
, поэтому память выделена только двум массивам. Быстрее означает, что он выполняется быстрее.