Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby是否有类似于php的多维数组?_Php_Arrays_Ruby - Fatal编程技术网

ruby是否有类似于php的多维数组?

ruby是否有类似于php的多维数组?,php,arrays,ruby,Php,Arrays,Ruby,就像在php中一样: $input = [ 'a' => 'A', 'b' => 'B', 'cdef' => [ 'c' => 'C', 'd' => 'D', 'ef' => [ 'e' => 'E', 'f' => 'F' ]

就像在php中一样:

$input = [
      'a' => 'A',
      'b' => 'B',
      'cdef' => [
             'c' => 'C',
             'd' => 'D',
             'ef' => [
                  'e' => 'E',
                  'f' => 'F'
             ]
      ]
]
也许用散列?以前从未使用过ruby:)

当我输入代码时:

input = Hash.new
input['a'] = 'A'
input['b'] = 'B'
input['cdef']['c'] = 'C'
input['cdef']['d'] = 'D'
input['cdef']['ef']['e'] = 'E'
input['cdef']['ef']['f'] = 'F'
错误于

  input['cdef']['c'] = 'C'
信息:

[]=' for nil:NilClass

要修复错误,需要在分配键值对之前初始化空哈希

input = Hash.new
input['a'] = 'A'               #=> {"a"=>"A"}
input['b'] = 'B'               #=> {"a"=>"A", "b"=>"B"}
input['cdef'] = {}             #=> {"a"=>"A", "b"=>"B", "cdef"=>{}}
input['cdef']['c'] = 'C'       #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C"}}
input['cdef']['d'] = 'D'       #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D"}}
input['cdef']['ef'] = {}       #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D", "ef"=>{}}}
input['cdef']['ef']['e'] = 'E' #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D", "ef"=>{"e"=>"E"}}}
input['cdef']['ef']['f'] = 'F' #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D", "ef"=>{"e"=>"E", "f"=>"F"}}}

要修复错误,需要在分配键值对之前初始化空哈希

input = Hash.new
input['a'] = 'A'               #=> {"a"=>"A"}
input['b'] = 'B'               #=> {"a"=>"A", "b"=>"B"}
input['cdef'] = {}             #=> {"a"=>"A", "b"=>"B", "cdef"=>{}}
input['cdef']['c'] = 'C'       #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C"}}
input['cdef']['d'] = 'D'       #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D"}}
input['cdef']['ef'] = {}       #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D", "ef"=>{}}}
input['cdef']['ef']['e'] = 'E' #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D", "ef"=>{"e"=>"E"}}}
input['cdef']['ef']['f'] = 'F' #=> {"a"=>"A", "b"=>"B", "cdef"=>{"c"=>"C", "d"=>"D", "ef"=>{"e"=>"E", "f"=>"F"}}}

尽管@davidhu2000的答案或多或少是正确的,但我会选择更健壮的解决方案:在构造函数中使用。
dup.clear
魔术是递归地将
default\u proc
传递给深度嵌套的元素:

input = Hash.new { |h, k| h[k] = h.dup.clear }
input['a'] = 'A' 
input['b'] = 'B' 
input['cdef']['c'] = 'C' 
input['cdef']['d'] = 'D' 
input['cdef']['ef']['e'] = 'E' 
input['cdef']['ef']['f'] = 'F' 

input
这样就不需要难看的冗余任务:

input['cdef'] = {}
input['cdef']['ef'] = {} 
忍者任务:

input = Hash.new { |h, k| h[k] = h.dup.clear }
input['a1']['a2']['a3']['a4']['a5'] = 42
input
#⇒ {"a1" => {"a2" => {"a3" => {"a4" => {"a5" => 42}}}}}

尽管@davidhu2000的答案或多或少是正确的,但我会选择更健壮的解决方案:在构造函数中使用。
dup.clear
魔术是递归地将
default\u proc
传递给深度嵌套的元素:

input = Hash.new { |h, k| h[k] = h.dup.clear }
input['a'] = 'A' 
input['b'] = 'B' 
input['cdef']['c'] = 'C' 
input['cdef']['d'] = 'D' 
input['cdef']['ef']['e'] = 'E' 
input['cdef']['ef']['f'] = 'F' 

input
这样就不需要难看的冗余任务:

input['cdef'] = {}
input['cdef']['ef'] = {} 
忍者任务:

input = Hash.new { |h, k| h[k] = h.dup.clear }
input['a1']['a2']['a3']['a4']['a5'] = 42
input
#⇒ {"a1" => {"a2" => {"a3" => {"a4" => {"a5" => 42}}}}}

input={'a'=>'a','b'=>'b','cdef'=>{'c'=>'c',…}}
input={'a'=>'a','b'=>'b','cdef'=>{'c'=>'c',…}
。我想知道用这种方法在10级上的嵌套元素的赋值会是什么样子。请检查我的答案。这会很难看,我肯定更喜欢你的解决方案。我想知道用这种方法在10级上分配嵌套元素会是什么样子。请检查我的答案。这会很难看,我肯定更喜欢你的解决方案。@SergioTulentsev谢谢。不过,生成初始散列(以及所有嵌套的具有子散列的散列)的临时冗余副本需要花费一定的成本。但在人工操作的哈希上,它应该可以正常工作。@mudasobwa thx!。。。但是,当我将另一个多维散列的克隆复制到
input
,比如我有
origin={'a'=>1,'b'=>2,'cd'=>{'c'=>3,'d'=>4}}
,然后我将origin复制到input,使用
input=origin.clone
,那么你的厚度就不起作用了,也许克隆操作破坏了输入的结构?首先,请停止将散列称为“多维数组”,因为它们无论如何都不是数组,php只是暗示了这个术语的错误用法。第二,我不明白这个问题。由于
origin
hash已经声明了
default\u proc
,它的克隆已经声明了。最后,但并非最不重要的一点:你应该问另一个问题,你是否有。f,我称之为“多维散列”,因为你没有仔细考虑我的问题,我同意,s,thx,我知道重点在哪里,lbnl,我的问题还没有解决,为什么我不能问更多,MDZZ确实,有一个问题“多维散列”,然而,它是一个普通的老好的“散列”请同时使用英语,因为没有14位yo啦啦队队员的聊天室。你的问题已经解决了,现在你又有了一个关于克隆哈希的问题。因此,我们倾向于在每篇帖子中实施一个模型1问题,以便于未来的读者在现有的各种答案中缩小他们的问题范围。@SergioTulentsev谢谢。虽然生成初始散列(以及所有嵌套的有子散列)的临时冗余副本需要花费一定的成本。但是在人工操作的散列上,它应该可以正常工作。@mudasobwa thx!…但是在我将另一个多维散列的克隆复制到
输入
中之后,我该如何使用这个技巧,就像我有
源={'a'=>1,'b'=>2,'cd'=>{'c'=>3,'d'=>4}}
,我使用
input=origin.clone
,将origin复制到input,然后ur-thick不起作用,可能是
clone
操作破坏了输入的结构?首先,请停止调用哈希“多维数组”因为它们无论如何都不是数组,php只是暗示了这个术语的错误用法。其次,我不理解这个问题。因为
origin
hash已经声明了
default\u proc
,所以它的克隆已经是。最后,但并非最不重要的一点是:你应该问另一个问题,你是否有一个.f,我称它为“多维散列“,既然你没有仔细考虑我的问题,我同意,s,thx,我知道问题的关键在哪里,lbnl,我的问题还没有解决,为什么我不能问更多,mdzz确实,有一个“多维散列”,尽管如此,它是一个普通的好“散列”请同时使用英语,因为没有14位yo啦啦队队员的聊天室。你的问题已经解决了,现在你有了另一个关于克隆哈希的问题,去问吧。因此,我们倾向于在每篇帖子中实施一个模型1问题,以便未来的读者更容易在现有的各种答案中缩小他们的问题范围。