phpのように:
$input = [
'a' => 'A',
'b' => 'B',
'cdef' => [
'c' => 'C',
'd' => 'D',
'ef' => [
'e' => 'E',
'f' => 'F'
]
]
]
多分ハッシュを使用しますか?以前にルビーを使用したことはありません:)
私がコードを書いたとき:
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
@ davidhu2000による答えは多かれ少なかれ正しいですがdefault_proc
、コンストラクターで使用するという、より堅牢なソリューションを使用します。dup.clear
魔法は再帰的に通過させることであるdefault_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}}}}}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加