/ / Come posso ottenere le chiavi in ​​un hash multidimensionale in Ruby? - rubino, hash

Come posso ottenere le chiavi in ​​un hash multidimensionale in Ruby? - rubino, hash

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 № 1

Supponendo 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.