【问题标题】:How do I create this multidemsional Array, Hash Combo?如何创建这个多维数组,哈希组合?
【发布时间】:2011-04-22 22:01:26
【问题描述】:

我有this data,我需要像这种类型的输出。我基本上需要所有的场地和日期以及与之相关的所有歌曲....如果有人能想到更好的结构以及如何实现它,我将非常感谢...

{ 
["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

【问题讨论】:

    标签: ruby-on-rails ruby arrays hash multidimensional-array


    【解决方案1】:

    这是一个有效的解决方案:

    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
    

    【讨论】:

      【解决方案2】:

      我认为你的结构不太正确。应该是这样的

      [ 
      {"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
      

      希望你至少能明白这一点。

      【讨论】:

        猜你喜欢
        • 2014-09-18
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        相关资源
        最近更新 更多