2013-08-19 5 views
2

У меня есть массив с индексами 0..n 0-я позиция равна нулю. Моя информация начинается с позиции 1. Что такое Ruby-способ прохождения этого массива и начать с позиции 1. В настоящее время, что я делаю следующее:Ruby array, начинающийся с 1

([email protected]).each do |index| 
    do something with @vertices[index] 
end 
+0

Почему бы не использовать массивы на основе 0, как и все остальные? –

+0

'@vertices [1 ..- 1] .each do | elem |', но это сумасшествие. –

+1

Я строю имена химических формул. И чтобы избежать путаницы, я хочу сохранить молекулу с 1 атомом углерода в @vertices [1]. – mikeglaz

ответ

2

Я строю имена химических формул. И, чтобы избежать путаницы, я хочу сохранить молекулу с 1 атомом углерода в @vertices [1]

Используйте Hash вместо:

@vertices = { 
    1 => 'Molecule with 1 carbon atom', 
    2 => 'Molecule with 2 carbon atoms', 
    5 => 'Molecule with 5 carbon atoms' 
} 

@vertices.each do |carbon_atoms, molecule| 
    # do something with molecule 
end 
0
1.upto(array.size) {|index| array[index] } 

Это будет использовать метод upto для управления индексом, а затем использовать индекс для доступа к элементу массива.

Не знаете, почему это важно, что nil находится в позиции 0, я не думаю, что это относится к тому, как перейти от индекса 1 в массиве. На самом деле нет необходимости упоминать, что у вас есть массив с индексами от 0 до n, который описывает очень массив в Ruby.

2

Я не уверен, почему вы начинаете с индексом 1, а 0 является стандартным, но так, как я хотел бы подойти к этому является:

@vertices[1..-1].each { |element| do_what_you_planned_on_doing } 

или

@vertices.each_with_index do |ele, index| 
    next if index == 0 
    do_what_you_planned_on_doing 
end 

Я предпочитаю первый. Кажется более элегантным.

0

Опцион является выбросить первый, если вам не хочу этого.

@vertices.shift 
@vertices[0] 
# => the one you want 

shift необходимо удалить первый элемент и вернуть его. Он меняет сам массив. Doc: http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-shift