【问题标题】:New hash from existing hash within list - Ruby列表中现有哈希的新哈希 - Ruby
【发布时间】:2021-10-15 13:02:31
【问题描述】:

我有一个列表,其中包含类似于此的哈希:

list = [{"created_at"=>"2016-11-07T18:49:51.000Z",
         "updated_at"=>"2016-11-07T18:49:51.000Z",
         "id"=>1,
         "name"=>"Test1",
         "title"=>"Test1",
         "description"=>""},
        {"created_at"=>"2017-05-24T13:34:13.000Z",
         "updated_at"=>"2017-05-24T13:34:13.000Z",
         "id"=>23,
         "name"=>"Test2",
         "title"=>"Test2",
         "description"=>nil}]

我希望能够遍历这个散列列表并创建一个新散列,其中只有 id 的值作为键,名称的值作为键的值。目前我的解决方案是这样的:

def new_hash(list)
  @new_hash = Hash.new
  list.each do | x |
    @new_hash[x["id"]] = x["name"]
  end
end

这会产生一个像这样的哈希:

{1=>"Test1", 23=>"Test2"}

我的问题是,在 Ruby 中有没有更优雅的方法来解决这个问题?

【问题讨论】:

    标签: ruby hash


    【解决方案1】:

    试试这个

    Hash[list.map { |h| h.values_at('id', 'name') }]
     => {1=>"Test1", 23=>"Test2"}
    

    【讨论】:

    • 不错。我不知道你可以这样称呼哈希。那读起来好多了。感谢您的回答。
    【解决方案2】:
    list.each_with_object({}) { |g,h| h[g["id"]] = g["name"] }
    

    【讨论】:

      【解决方案3】:

      另一种选择:

      list.map {|hash| [hash["id"], hash["name"]]}.to_h
      #=> {1=>"Test1", 23=>"Test2"}
      

      【讨论】:

        【解决方案4】:
        data = {name: 'akshay', last_name: 'kakade'}
        new_hash = Hash[data]
        data.object_id
        new_hash.object_id
        

        【讨论】:

        • 虽然此代码 sn-p 可能会解决问题,但including an explanation 将帮助人们了解您的代码建议的原因。
        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 2014-03-03
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 2012-06-03
        相关资源
        最近更新 更多