Comment récupérer la valeur de hachage dans un tableau dans Ruby

Quand j'ai touché Ruby pour la première fois depuis longtemps, je ne l'ai pas tellement compris que j'ai été surpris, alors j'ai cherché.

Dans le cas d'une telle combinaison désagréable de tableau et de hachage.

test.rb


user_data = [
  { user: { profile: { name: 'George', sex: 'man' } } },
  { user: { profile: { name: 'Alice', sex: 'woman' } } },
  { user: { profile: { name: 'Taro', sex: 'man' } } }
]

Dans le tableau, il y a un hash appelé user, il y a un hash appelé profile imbriqué, et il y a une valeur dans la clé nommée name ... Je ne comprends plus.

Supprimons cela.

Sortez «George».

Comme ça

test.rb


puts user_data[0][:user][:profile][:name]

Bien sûr, si vous sortez 'Alice', ça ressemble à ça

test.rb


puts user_data[1][:user][:profile][:name]

Je viens de changer la position du tableau.

Si vous souhaitez récupérer le sexe dans le hachage de 'Alice'

test.rb


puts user_data[1][:user][:profile][:sex]

Je viens de changer: nom en: sexe.

Récupérer tout: noms dans le tableau

Puisqu'il s'agit d'un tableau, utilisez chacun pour en extraire un par un.

test.rb


user_data.each do |values|
  puts values[:user][:profile][:name]
end

Le résultat sera

test.rb


George
Alice
Taro

Lors de l'utilisation de la méthode dig

À partir de Ruby 2.3, dig est disponible en tant que nouvelle méthode qui peut être utilisée dans les classes de hachage.

Essayez de récupérer 'George' avec la méthode dig

test.rb


puts user_data.dig(0, :user, :profile, :name)

Si le hachage est contenu dans un tableau, entrez simplement le nombre de données souhaité dans l'argument.

Essayez de récupérer tout ': nom' avec la méthode dig

test.rb


user_data.each do |values|
  puts values.dig(:user, :profile, :name)
end

Avantages de l'utilisation de la méthode dig

Cela semble être la différence entre un retour avec une erreur ou nul lorsque la clé n'est pas trouvée. Si vous utilisez dig, il sera renvoyé comme nul, vous n'avez donc pas besoin de prendre des mesures contre les erreurs. (Jusque-là, il utilisait la méthode fetch, etc.)

test.rb


user_data = [
  {user: {}},
  {user: {}},
  {user: {}}
]

#Lors de l'utilisation de dig
user_data.each do |values|
  puts values.dig(:user, :profile, :age)
end

#Si vous n'utilisez pas dig
user_data.each do |values|
  puts values[:user][:profile][:age]
end

Le résultat ressemble à ceci

test.rb


% ruby tmp/test.rb
#=> nil

#=> undefined method `[]' for nil:NilClass (NoMethodError)

Recommended Posts

Comment récupérer la valeur de hachage dans un tableau dans Ruby
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment changer une chaîne dans un tableau en un nombre dans Ruby
[Ruby] Comment récupérer le contenu du double hachage
[Ruby] Comment compter les nombres pairs ou impairs dans un tableau
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Comment spécifier un tableau pour la valeur de retour / l'argument d'une méthode dans le fichier IDL CORBA
Comment créer la blockchain la plus simple de Ruby
Je veux obtenir la valeur en Ruby
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
[Rails] Comment afficher les images dans la vue
Comment itérer indéfiniment en Ruby
Comment demander en passant un tableau à une requête avec le client HTTP de Ruby
Comment installer Bootstrap dans Ruby
Comment ajouter les mêmes index dans un tableau imbriqué
[Ruby] Comment extraire une valeur spécifique d'un tableau sous plusieurs conditions [sélectionner / chacun]
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Comment obtenir la longueur d'un fichier audio avec Java
Comment incrémenter la valeur de Map sur une ligne en Java
Comment ajouter un nouveau hachage / tableau
Comment passer la valeur à un autre écran
Comment obtenir la date avec Java
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Comment convertir un tableau de chaînes en un tableau d'objets avec l'API Stream
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Comment créer votre propre annotation en Java et obtenir la valeur
Comment trouver la cause de l'erreur Ruby
Comment vérifier le journal dans le conteneur Docker
Comment utiliser un tableau pour les clés HashMap
Comment résoudre les problèmes d'expression en Java
Comment créer un fichier exécutable dans Maven
Comment vérifier les commandes Rails dans le terminal
Comment implémenter la pagination dans GraphQL (pour ruby)
[Introduction à Ruby] Comment utiliser la méthode slice
Comment vérifier si une variable d'instance est définie dans une classe Ruby
Comment résoudre les erreurs qui se produisent lors du test d'intégration "Ruby on Rails"
Initialiser le tableau Ruby avec 0 comme Java, c'est-à-dire définir la valeur par défaut sur 0
Comment faire une méthode de jugement pour rechercher n'importe quel caractère dans le tableau
Comment démarrer un indice à partir d'un nombre arbitraire dans le traitement itératif Ruby
Comment rendre une image partiellement transparente avec le traitement
Comment installer Ruby sur une instance EC2 d'AWS
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel