2012-01-30 2 views
1

Как правило,, как вы можете определить, как итерации через массив на основе известного шаблона?Как я могу сопоставить новый массив из определенного (известного) шаблона?

Конкретно, это шаблон Я хотел бы итерацию, возвращая массив массивов: (Каждая цифра является значение индекса исходного массива: [0, 1, 2, 3])

0,1

0,1,2

0,1,2,3

1,2

1,2,3

2,3

+0

Можете ли вы показать пример того, что вы хотите сделать? – oldergod

+0

Предыдущий плакат @SimonMayer получил смысл того, что я нацелился на –

ответ

1

Вот еще более кратким альтернатива :

a.size.times { |i| (a.size - i).times { |j| p a[i..j+i] } } 
+0

Согласовано. Это лучше. – SimonMayer

2
arr = [0,1,2,3] 
main_array = [] 

arr.each_index{|i| 
    arr.each_index{|j| 
    if i <= j 
     a = arr[i..j] 
     main_array.push(a) 
    end 
    } 
} 
p main_array 
+0

Спасибо, это похоже на трюк, но _how_ вы пришли к этому решению? Есть ли урезанный способ мышления через итерации шаблона, подобные этому? Может ли цикл for быть упрощен до математической проблемы? –

+0

Это в основном математический. Я мог видеть, что ваш шаблон имеет две петли: один для повторения и определения первой части массива; другой (содержащийся внутри) для повторения и определения длины каждого массива. С точки зрения метода, я полагаю, я решил его в том же порядке. Сначала нужно получить начальную точку 'i'. Затем я посмотрел, как я начинаю массив на 'i' и нарезаю его на увеличивающуюся длину' j'. – SimonMayer