ruby是否有类似于php的多维数组?
就像在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' ]
$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问题,以便未来的读者更容易在现有的各种答案中缩小他们的问题范围。