Какой самый простой способ конвертировать
[x1, x2, x3, ... , xN]
в
[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
Если вы используете ruby 1.8.7 или 1.9, вы можете использовать тот факт, что методы итератора, такие как each_with_index
, при вызове без блока, возвращают Enumerator
объект, который вы можете вызывать Enumerable
методами, например, map
on. Так что вы можете сделать:
arr.each_with_index.map { |x,i| [x, i+2] }
В 1.8.6 вы можете сделать:
require 'enumerator'
arr.enum_for(:each_with_index).map { |x,i| [x, i+2] }
.each_with_index.map
?map
это метод,Enumerable
как всегда.each_with_index
, Когда вызывается без блока, возвращаетEnumerator
объект (в 1.8.7+), который смешивает вEnumerable
, так что вы можете позвонитьmap
,select
, иreject
т.д. на нем так же , как на массив, хэш, дальность и т.д.arr.map.with_index{ |o,i| [o,i+2] }
map.with_index
не работает в 1.8.7 (map
возвращает массив при вызове без блока в 1.8).В Ruby есть Enumerator # with_index (offset = 0) , поэтому сначала преобразуйте массив в перечислитель, используя Object # to_enum или Array # map :
источник
foo = ['d'] * 5; foo.map!.with_index { |x,i| x * i }; foo #=> ["", "d", "dd", "ddd", "dddd"]
В ruby 1.9.3 есть цепной метод,
with_index
который можно связать для отображения.Например:
источник
Сверху запутывание:
источник
Вот еще две опции для 1.8.6 (или 1.9) без использования перечислителя:
источник
Мне всегда нравился синтаксис этого стиля:
Invoking
each_with_index
дает вам перечислитель, который вы можете легко отобразить с помощью доступного индекса.источник
Забавный, но бесполезный способ сделать это:
источник
A fun, but useless way
.+2
создать выход, который запрашивает OPисточник
источник
map.with_index
уже существует в ruby. Зачем предлагать заново открыть перечислимый класс и добавить что-то, что уже существует?each_with_index.map
и т. Д., И даже те из нас, кто работает в более новых версиях, могут предпочесть использовать map.with_index FWIW :)Я часто делаю это:
Вместо прямой итерации по элементам массива вы выполняете итерацию по целому ряду целых чисел и используете их в качестве индексов для извлечения элементов массива.
источник