Как мне создать этот мультиразмерный Array, Hash Combo? - PullRequest
1 голос
/ 08 октября 2010

У меня эти данные , и мне нужен вывод, подобный этому типу вывода .. Мне в основном нужно иметь все места и их даты, и все песни, связанные с ними .... если кто-то можетПодумайте о лучшей структуре и о том, как ее достичь, я был бы очень благодарен ...

{ 
["Vector Arena - Auckland Central, New Zealand" => 
    { 
    "2010-10-10" => ["Enter Sandman", "Unforgiven", "And justice for all"]
    }], 
    ["Brisbane Entertainment Centre - Brisbane Qld, Austr..." => 
        { 
        "2010-10-11" => ["Enter Sandman"]
    }]
 }

Пока я пробовал это ... и не уверен, что я двигаюсь в правильном направлении ..

@venues = Hash.new {|hash, key| hash[key] = 0}
@requests = Request.find_all_by_artist("Metallica")
@requests.each do |request|
  @venues[request.venue] =  request.showdate
end

Ответы [ 2 ]

1 голос
/ 08 октября 2010

Вот эффективное решение:

result = Hash.new {|h1, k1| h1[k1] = Hash.new{|h2, k2| h2[k2] = []}}
Request.find_all_by_artist("Metallica", 
 :select => "DISTINCT venue, showdate, LOWER(song) AS song"
).each do |req|
  result[req.venue][req.showdate] << req.song.titlecase
end
1 голос
/ 08 октября 2010

Я думаю, что ваша структура не совсем правильная.Это должно быть похоже на

[ 
{"Vector Arena - Auckland Central, New Zealand" => 
    { 
    "2010-10-10" => ["Enter Sandman", "Unforgiven", "And justice for all"]
    }}, 
    }"Brisbane Entertainment Centre - Brisbane Qld, Austr..." => 
        { 
        "2010-10-11" => ["Enter Sandman"]
    }}
 ]

Попробуйте этот код

@venues = []
      all_venues = Request.find(:all, :select => "distinct venue, showdate")
      all_venues.each do |unique_venue|
        venue_hash = {}
        showdate_hash = {}
        song_lists = []

        requests = Request.find_all_by_venue(unique_venue.venue)  
        requests.each do |each_request|
          song_lists << each_request.song
        end
        showdate_hash[unique_venue.showdate] = song_lists

        venue_hash[unique_venue.venue] = showdate_hash
        @venues << venue_hash
      end

Надеюсь, вы хотя бы поняли идею

...