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.
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.
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
À partir de Ruby 2.3, dig est disponible en tant que nouvelle méthode qui peut être utilisée dans les classes de hachage.
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.
test.rb
user_data.each do |values|
puts values.dig(:user, :profile, :name)
end
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