Quindi con un hash normale puoi usarlo per ottenere le chiavi:
hash.keys
Come posso ottenere le chiavi della seconda dimensione di un hash multidimensionale che assomiglia a questo:
{"<id>"=>{"first_name"=>"test", "last_name"=>"test_l", "username"=>"test_user",
"title"=>"Sales Manager", "office"=>"test", "email"=>"test@test.com"}}
<id>
è unico per ogni articolo.
Quindi le chiavi che voglio dall'alto sono: first_name, last_name, username, title, office and email
risposte:
2 per risposta № 1Supponendo che tu abbia un hash che ha una chiave sconosciuta con un valore: un hash.
h = {"<id>"=>{"first_name"=>"test", "last_name"=>"test_l", "username"=>"test_user",
"title"=>"Sales Manager", "office"=>"test", "email"=>"test@test.com"}}
p h[h.keys.first].keys
#=> ["first_name", "last_name", "username", "title", "office", "email"]
(Ma ogni volta che vedo un costrutto come questo mi chiedo perché non sia un Struct).
4 per risposta № 2
Faresti qualcosa come:
hash["<id>"].keys
2 per risposta № 3
Di seguito ti verranno fornite tutte le chiavi utilizzate negli hash di secondo livello. Ho usato uniq
in modo da non ottenere duplicati.
hash.collect { |k, v| v.keys }.flatten.uniq
2 per risposta № 4
Suppongo che tu intenda che ci saranno diverse chiavi "id" univoche nell'hash di base che indicano hash nidificati che contengono ciascuno le chiavi "first_name", "last_name", ecc. Se questo è il caso:
hash.values.map(&:keys)
restituirà una matrice di array contenente le chiavi di ciascun hash nidificato.
D'altra parte, se hai solo una coppia chiave-valore (come nel tuo esempio), puoi farlo
hash.values.first.keys
che restituirebbe una matrice piatta di chiavi corrispondente a quelle dell'hash nidificato solitario.