J'essaie d'atteindre les résultats JSON suivants:
@results = Hash.new
results['Search'].each do |r|
if r['Type'] == 'movie'
@results['movie'] << {
'title' => r['Title'],
'year' => r['Year']
}
elsif r['Type'] == 'series'
@results['tv'] << {
'title' => r['Title'],
'year' => r['Year']
}
end
end
3 Réponses :
Je crois que le problème a à voir avec l'initialisation de votre hachage. Le film code> et code> et Voici comment il ressemble au reste de votre code: P> TV code> ne sont pas actuellement un tableau. Vous pouvez initialiser votre hasch comme ceci: @results = { 'movie' => [], 'tv' => [] }
results['Search'].each do |r|
if r['Type'] == 'movie'
@results['movie'] << {
'title' => r['Title'],
'year' => r['Year']
}
elsif r['Type'] == 'series'
@results['tv'] << {
'title' => r['Title'],
'year' => r['Year']
}
end
end
Ah, merci beaucoup, c'est exactement ce que je cherche.
Vous préférez écrire @results = hachage.new {| h, k | h [k] = []} code> pour le rendre plus général. Si, par exemple, @results code> n'a pas de clé "film" code>, @Results ["film"] code> dans @RESULTS ['Film'] << {'Titre' => R ['Titre'], 'Année' => R ['Année'] Code> sera défini sur un tableau vide avant << {' Titre '=> R [' Titre '],' Année '=> R [' Année ']} code> est exécuté.
@CarySwoveland c'est un bon point. La fabrication générale n'est utile que si ce code vise à servir un cas d'utilisation plus général que ce que l'OP a besoin, cependant.
Je suis d'accord, à condition que la boule de cristal ait conclu que les clés de hachage ne changeront pas à l'avenir.
Je pense que vous pouvez obtenir ce que vous voulez en utilisant énumérable # chacun_with_object code> et attribuant une valeur par défaut au hachage. def group_search_results(items)
results = Hash.new { |hash, key| hash[key] = [] }
items.each_with_object(results) do |item|
results[item['Type']] << {'title' => item['Title'], 'year' => item['Year']}
end
end
describe "search_results" do
it "groups into an object" do
items = [
{'Type' => 'movie', 'Title' => 'Thor', 'Year' => 2011},
{'Type' => 'movie', 'Title' => 'Iron Man', 'Year' => 2008},
{'Type' => 'series', 'Title' => 'Parks and Recreation', 'Year' => 2009},
{'Type' => 'series', 'Title' => 'Friends', 'Year' => 1994},
]
results = group_search_results(items)
expect(results).to eq({
'movie' => [
{'title' => 'Thor', 'year' => 2011},
{'title' => 'Iron Man', 'year' => 2008},
],
'series' => [
{'title' => 'Parks and Recreation', 'year' => 2009},
{'title' => 'Friends', 'year' => 1994},
],
})
end
end
results = {
search: {
movie: [
{ title: 'Thor', year: 2011 },
{ title: 'Iron Man', year: 2008 },
],
tv: [
{ title: 'Parks and Recreation', year: 2009 },
{ title: 'Friends', year: 1994 },
]
}
}
@results = Hash.new{|k, v| k[v] = []}
results[:search].each do |type, array|
@results[type].push(*array)
end
results[:search].each_with_object(Hash.new{|k, v| k[v] = []}) do |(type, array), hash|
hash[type].push(*array)
end
Veuillez afficher le résultat (objet rubis) que vous voulez pour votre exemple.
Alors, que supposez-vous que la valeur du
@results ["film"] code> est quand vous essayez d'abord de le pousser? Aussi, quelle erreur obtenez-vous? Pas de méthode?@jvillian, je reçois des résultats, mais ça ne me donne que le dernier article de la boucle, je veux tous les articles
@CarySwoveland Les résultats que je voulais, c'est la structure d'objet JSON que j'ai placée ci-dessus.
J'ai mal compris. Vraisemblablement,
résultats code> (non@Results code>) est un hachage. Qu'est-ce que c'est?@CarySwoveland, désolé pour la confusion de nommage,
résultats code> est l'ensemble des résultats provenant d'une API que j'ai apporté une demande à.@results code> est le hachage que je veux réorganiser les données dans"Le plus éloigné que j'ai disparu est que" n'est pas une description d'erreur suffisante précise pour nous pour vous aider. Qu'est-ce que i> ne fonctionne pas? Comment i> ne fonctionne-t-il pas? Quels problèmes avez-vous avec votre code? Avez-vous un message d'erreur? Quel est le message d'erreur? Est le résultat que vous n'obtenez pas le résultat que vous attendez? Quel résultat attendez-vous et pourquoi, quel est le résultat que vous obtenez et comment les deux diffèrent-ils? Le comportement que vous observez n'est-il pas le comportement souhaité? Quel est le comportement souhaité et pourquoi, quel est le comportement observé et de quelle manière différent-ils?