【问题标题】:Best way to iterate a list of hash in ruby在ruby中迭代哈希列表的最佳方法
【发布时间】:2019-12-07 09:48:03
【问题描述】:

我有像 List> 这样的数据结构:

记录 = [{"1"=>​​[{"account_id"=>"1", "v"=>"1"}, {"account_id"=>"1", "v"=>"2"}, {"account_id"=>"1", "v"=>"3"}, {"account_id"=>"1", "v"=>"4"]}, {"2"=>[{"account_id"=>"2", "v"=>"4"}, {"account_id"=>"2", "v"=>"4"}, {"account_id"=>"2", "v"=>"4"}]}]

我不关心 hashmap 中的键(在本例中为“1”和“2”),并希望按组迭代 map 的值:

records.each do |account_map| 
    account_record = account_map.values[0] # This line
        for i in (0 ... account_record.size - 1)
            #do something and update account_record[i]
        end
    end
end

如何将account_record = account_map.values[0] 合并到each 循环中或使其看起来更好。谢谢

【问题讨论】:

  • 不确定你在问什么。你要的是account_map.values.each { |account| ... }吗?
  • each 最初将records 的第一个元素,即{"1"=>[{"account_id"=>"1", "v"=>"1"} 传递给块,并将块变量account_map 设置为等于该哈希值。然后计算account_map.values,即[[{"account_id"=>"1", "v"=>"1"}, ... , {"account_id"=>"1", "v"=>"4"]]。请注意,这是该散列的所有值的数组,它只是一个,即散列数组。然后计算account_map.values[0],这是散列数组,它是records的第一个元素的散列中键1的值...
  • ...然后你想对那个散列数组做一些事情,但是records 的第二个元素,它是一个具有等于"2" 的单个键的散列,永远不会被处理。这是你的意图吗?你最好用语言解释你想做什么。例如,“给定一个哈希数组record,其中每个哈希都有一个键,其值是一个哈希数组,我希望......”。
  • 请修正,records 不是一个有效的对象。有问题,例如这里{"account_id"=>"1", "v"=>"4"]}。也许您还想添加预期的结果。

标签: ruby loops each


【解决方案1】:

您的示例非常令人困惑,但迭代哈希的常规方法如下

hash.each do |key, value|
end

所以在你的例子中看起来你应该这样做

records.each do |account_map| 
    account_map.each do |index, array|
        array.each do |hash|
            hash['account_id'] # This is how you access your data
            hash['v']          # This is how you access your data
        end
    end
end

当然你应该使用比索引、数组和散列更好的变量名。

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多