Ruby Fusion de Deux Tableaux en Un seul
Voici ma situation. J'ai 2 Tableaux
@names = ["Tom", "Harry", "John"]
@emails = ["[email protected]", "[email protected]", "[email protected]"]
Je veux combinez ces deux dans certains Array/Hachage appelé @list
donc, je peux alors itérer à mon avis quelque chose comme ceci:
<% @list.each do |item| %>
<%= item.name %><br>
<%= item.email %><br>
<% end %>
Je vais avoir du mal à comprendre comment je peux atteindre cet objectif. Toutes les pensées?
Vous devez vous connecter pour publier un commentaire.
zip
est pour! De toute façon il n'a jamais vraiment entré dans ma boîte à outils standard. Nice. +1Array#zip
peut prendre un nombre arbitraire d'arguments.Juste pour être différent:
Ceci est similaire à ce Tableau#zip ne sauf que dans ce cas il n'y aura pas de néant rembourrage de courtes lignes; si quelque chose est manquant, une exception sera levée.
zip(*arrays)
. C'est elle!Cela vous donnera un hachage avec nom => e-mail.
names
ouemails
ont été tableaux qui contenait des tableaux,flatten
irait de manière récursive.Hash[ names.zip(emails) ]
Array#flatten
n'accepte pas les arguments en 1.8.6; si vous pouvez utiliserflatten(1)
ensuite, vous pouvez utiliser le formulaire deHash.[]
qui ne nécessite pas d'aplatissement. (les Deux sont disponibles dans 1.8.7 en plus de 1.9.)names.zip(emails).to_h
Vous pouvez utiliser
zip
à zip ensemble les deux tableaux, et puismap
pour créerItem
des objets à partir du nom-email-paires. En supposant que vous avez unItem
classe dontinitialize
méthodes accepte une table de hachage, le code ressemblera à ceci:Essayer Cette
Vous avez deux tableaux
@noms = ["Tom", "Harry", "John"]
@e-mails = ["[email protected]", "[email protected]", "[email protected]"]
@names.zip(@e-mails) fusionnent @e-mails à la @noms associés à leur indice comme ci-dessous
[["Tom", "[email protected]"], ["Harry", "[email protected]"], ["John", "[email protected]"]]
Nous pouvons maintenant convertir ce tableau de hachage en utilisant
Hash[@names.zip(@e-mails)]