2014-01-24 4 views
3

Как разбить массив с неопределенными записями:Как разбить массив на основе индекса его значений?

["a","b","c","d","e",...] 

В четных и нечетных массивах как:

["a","c","e",...] 

и

["b","d","f",...] 
+0

Вы запрашиваете четное и нечетное расщепление? –

+0

Вы спрашиваете, является ли количество записей четным или нечетным? Потому что это меняется. – user3094719

+0

Вы помещаете нечетные значения в массив и даже значения в другой, или это просто основано на индексе внутри массива? – Vache

ответ

1

Edit после осветления:

Yo и может сделать что-то вроде этого:

odds = [] 
evens = [] 
array.each_with_index { |el, index| index % 2 == 0 ? evens << el : odds << el } 
[odds, evens] 
+0

'[1,2,3,4,5] .select {| el | 11? } => [1,3,5] 'не возвращает то, что вы думаете. Возможно, вы захотите это исправить. –

+0

Спасибо и исправлены! –

+0

Проверьте мое новое решение;) – Abdo

0

EDITED: общее решение

partitions_number = 2 
['a','b','c','d','e'].group_by.with_index { |obj, i| i % partitions_number }.values 
=> [["a", "c", "e"], ["b", "d"]] 

['a','b','c','d','e'].group_by.with_index { |obj, i| i % 3 }.values 
=> [["a", "d"], ["b", "e"], ["c"]] 
+1

Это немного сложно читать. но он работает! –

10

Отредактировано на основе комментариев:

arr = [:foo, :foo, :bar, :baz, :qux, :foo] 

evens, odds = arr.partition.with_index{ |_, i| i.even? } 

evens # [:foo, :bar, :qux] 
odds # [:foo, :baz, :foo] 
+0

@falsetru Я отредактировал свой ответ на основе вашего комментария. – Kyle

+4

Отличная идея, полюбите ее! – Abdo

+0

Я счастлив, с этим .. Так что я удалил свой ответ .. :) –

1

Если вы используете Rails или может require 'active_support' вы можете это сделать:

a.in_groups_of(2).transpose 
+0

Что это будет, если массив имеет нечетное число элементов? –

+1

@Wayne 'in_groups_of' будет заполнять' nil', чтобы сделать их четными. 'transpose' доволен этим. –

+0

Замечательный. Теперь я могу поддержать этот замечательный ответ! –

Смежные вопросы