2015-12-09 2 views
-3

У меня есть массив массивов arr = [["U6342", "2015-01-12", "Account"],other similar arrays]рубин хэш-массивов удалить первый элемент из массива

тогда я группа его на первый элемент

arr.group_by(&:first) 
=> {"U6342"=>[["U6342", "2015-01-12", "Account"],other similar arrays]] 

Но я хочу, чтобы удалить первый элемент из всех массивов и получить

=> {"U6342"=>[[ "2015-01-12", "Account"],other similar arrays]] 

Возможно ли это?

+1

Да, это возможно ... Но я предполагаю, что вы ожидаете ответа. Покажите, что вы пробовали, и с какими проблемами вы столкнулись, тогда люди смогут вам помочь. – Kraal

+1

Вы можете улучшить свой вопрос, включив в него полный пример. Здесь я бы предположил, что 'arr' содержит четыре или пять массивов. Таким образом, все ответы будут использовать этот пример. Помимо этого, я не понимаю, почему ваш вопрос был опущен. –

+0

Добро пожаловать в переполнение стека. Пожалуйста, прочитайте «[ask]» и «[mcve]». Как и вы, вы задали очень широкий вопрос, поэтому получаете широкие ответы. –

ответ

6

можно shift необходимый элемент INPLACE.

arr.group_by &:shift 

Если вы не хотите, чтобы изменить исходный массив:

arr.map(&:dup).group_by &:shift 
+0

потрясающий, просто потрясающий! –

+0

'shift' также изменить« оригинальную »массив. Просто для информации;) –

+0

@LukasBaliak спасибо за напоминание, обновлено :) – mudasobwa

0

Вы можете использовать этот код

arr = [["U6342", "2015-01-12", "Account"], ["U6343", "2015-02-12", "Bank"]] 

Hash[arr.map{|ar| [ar.first, ar[1..-1]]}] 
# => {"U6342"=>["2015-01-12", "Account"], "U6343"=>["2015-02-12", "Bank"]} 

или "изменить" arr переменная оригинал

Hash[arr.map{|ar| [ar.shift, ar]}] 

Я надеюсь, что это помогает

1

Я думаю, некоторые из других отвечающих являются overthinking его:

arr = [ ["U6342", "2015-01-12", "Account"], 
     ["U1234", "2015-02-12", "Foo"], 
     ["U6342", "2015-03-12", "Bar"], 
     ["U1234", "2015-04-12", "Qux"] ] 

arr.group_by(&:shift) 
# => { "U6342" => [ [ "2015-01-12", "Account" ], 
#     [ "2015-03-12", "Bar"  ] ], 
#  "U1234" => [ [ "2015-02-12", "Foo"  ], 
#     [ "2015-04-12", "Qux"  ] ] 
# } 

Array#shift удаляет первый элемент из массив и возвращает его. arr.group_by(&:shift) удаляет первый элемент из каждого элемента в arr и группирует его.

+0

Excelllent! Вы отправили вскоре после @mudasobwa (время, необходимое для добавления вашего примера), но достаточно близко, чтобы я назвал его галстуком, поэтому оставьте свой ответ. –

0

Вы не должны использовать group_by в группу-по:

arr = [["dog", "named", "Bert"], 
     ["cat", "named", "Boots"], 
     ["dog", "named", "Hank"], 
     ["pig", "named", "Porky"], 
     ["cat", "named", "Tiger"]] 

arr.each_with_object(Hash.new { |h,k| h[k]=[] }) { |(f,*a),h| h[f] << a } 
    # => {"dog"=>[["named", "Bert"], ["named", "Hank"]], 
    #  "cat"=>[["named", "Boots"], ["named", "Tiger"]], 
    #  "pig"=>[["named", "Porky"]]} 

Примечание это не мутировать arr.

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