相关疑难解决方法(0)

Ruby Style:如何检查嵌套的哈希元素是否存在

考虑存储在哈希中的"人".两个例子是:

fred = {:person => {:name => "Fred", :spouse => "Wilma", :children => {:child => {:name => "Pebbles"}}}}
slate = {:person => {:name => "Mr. Slate", :spouse => "Mrs. Slate"}} 
Run Code Online (Sandbox Code Playgroud)

如果"人"没有任何子女,则"儿童"元素不存在.所以,对于Slate先生,我们可以检查他是否有父母:

slate_has_children = !slate[:person][:children].nil?
Run Code Online (Sandbox Code Playgroud)

那么,如果我们不知道"slate"是一个"人"哈希呢?考虑:

dino = {:pet => {:name => "Dino"}}
Run Code Online (Sandbox Code Playgroud)

我们不能再轻易检查孩子了:

dino_has_children = !dino[:person][:children].nil?
NoMethodError: undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

那么,你如何检查哈希的结构,特别是如果它被深深嵌套(甚至比这里提供的例子更深)?也许更好的问题是:这样做的"红宝石方式"是什么?

ruby hash coding-style

56
推荐指数
3
解决办法
4万
查看次数

在Ruby中递归遍历哈希

我遇到了遍历Hash的这个函数的问题.哈希可能包含一个哈希数组.我希望该方法搜索一个id,然后只返回它找到的嵌套哈希.

它似乎适用于遍历,但它返回传入的原始值.

require 'rubygems'
require 'ruby-debug'

def find_by_id(node, find_this="")
  if node.is_a?(Hash)
    node.each do |k,v|
      if v.is_a?(Array)
        v.each do |elm|
          if elm["_id"] == find_this && !find_this.empty?
            return elm      # THIS IS WHAT I WANT!
          else
            find_by_id(elm, find_this)
          end
        end
      end
    end
  end
end

x = {"name" => "first", "_id"=>'4c96a9a56f831b0eb9000005', "items"=>["name" => "second", "_id"=>'4c96a9af6f831b0eb9000009', "others"=>[{"name" => "third", "_id"=>'4c96a9af6f831b0eb9000007'}, {"name" => "fourth", "_id"=>'4c96a9af6f831b0eb9000008'}] ] }

find_by_id(x, '4c96a9af6f831b0eb9000008')
Run Code Online (Sandbox Code Playgroud)

ruby

4
推荐指数
1
解决办法
9782
查看次数

访问由键数组指定的嵌套哈希元素

我正在尝试获得一个通用的解决方案来解决在给定一组键值的情况下访问嵌套哈希中的元素的问题,例如:

hash = { "a" => { "b" => 'foo' }}
array = ["a", "b"]

function(array)
=> "foo"
Run Code Online (Sandbox Code Playgroud)

我猜这可能是一个单行.它也与这个问题密切相关: Ruby将数组转换为嵌套哈希

ruby arrays hash

4
推荐指数
1
解决办法
1513
查看次数

标签 统计

ruby ×3

hash ×2

arrays ×1

coding-style ×1