Как создать хеш с набором массивов - PullRequest
0 голосов
/ 21 июня 2011

У меня есть следующее:

[[1,1,3], [1,2,3], [2,1,3]

Я хочу иметь возможность взять выше и создать хэш

 1 => { [1,3], [2,3] }, 2 => {[1,3]}

EDIT

Кроме того, я также хотел добавить следующее:

, поскольку первым элементом в новом массиве является месяц, если у меня нет данных за 4-й месяц, он может по умолчанию установить значение [4,0]

 1 => { [1,3], [2,1], [3,4], }

Ответы [ 2 ]

4 голосов
/ 21 июня 2011
x = [[1,1,3], [1,2,3], [2,1,3]]
y = x.map {|a| {a[0]=> [a[1], a[2]]}}

Редактировать

На самом деле мое первоначальное решение было неверным, оно дает вам:

[{1=>[1, 3]}, {1=>[2, 3]}, {2=>[1, 3]}] 

Я считаю, что это ближе к тому, что вы искали:

x = [[1,1,3], [1,2,3], [2,1,3]]
h = {}

x.each do |a|
  if h[a[0]].nil?
    h[a[0]] = []
  end
  h[a[0]] << [a[1], a[2]]
end

, который дает вам хэш массивов:

{1=>[[1, 3], [2, 3]], 2=>[[1, 3]]}
0 голосов
/ 02 августа 2012
require 'facets'
xs = [[1,1,3], [1,2,3], [2,1,3]]
xs.map_by { |*ys| [ys.first, ys.drop(1)] }
=> {1=>[[1, 3], [2, 3]], 2=>[[1, 3]]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...