J'ai Je ne connais pas le numéro final des hachages @Post et de la clé => éléments de valeur dans le tableau. p> Je ne sais pas comment attribuer le hash dans une boucle pour tous les éléments de tous les éléments de le tableau. Un par un @post_csv_order [0] [0] => @post_csv_order [0] [1] code> fonctionne bien. P> # require 'rubygems'
require 'pp'
@post = {}
forum_id = 123 #only sample values.... to make this sample script work
post_title = "Test post"
@post_csv_order = [
["ForumID" , forum_id],
["Post title", post_title]
]
if @post[forum_id] == nil
@post[forum_id] = {
@post_csv_order[0][0] => @post_csv_order[0][1],
@post_csv_order[1][0] => @post_csv_order[1][1]
#@post_csv_order.map {|element| element[0] => element[1]}
#@post_csv_order.each_index {|index| @post_csv_order[index][0] => @post_csv_order[index][1] }
}
end
pp @post
3 Réponses :
Je ne suis pas sûr que je comprends bien votre question, mais je suppose que vous souhaitez convertir un tableau 2D dans un hachage.
Supposons que vous ayez un tableau tel que: P>
keys = array.inject([]) {|a,e| a << e[0] }
=> [:foo, :bar, :baz]
@paradigmatic: Peut-être que vous n'avez peut-être pas compris complètement mais vous avez répondu complètement :-) Tout ce dont j'avais besoin était hash = array.inject ({}) {| H, e | h [e [0]] = E [1]; h} code> que j'ai changé dans mon exemple de code sur @post [forum_id] = @ post_csv_order.inject ({}) {| H, e | h [e [0]] = E [1]; h} code> et cela fait exactement je voulais faire. Je vais vérifier dans l'ensemble du script de projet demain. Merci.
L'autre moyen de construire un hachage d'un tableau de tableaux de clé, la valeur des paires est: hachage [* array.flatten]
@Wayne: En effet, il existe un moyen plus facile avec le hasch [], mais l'aplatir n'est pas nécessaire depuis 1,8,7 (et il est en fait dangereux, si l'une de vos clés / valeur est une matrice) Voir ma réponse
@Wayne Conrad: Wow. @post [forum_id] = hachage [* @ post_csv_order.flatten] code> fonctionne vraiment bien. Merci
Le meilleur moyen est d'utiliser note strong>: ceci a été introduit dans Ruby 2.1.0. Pour plus vieux rubis, vous pouvez utiliser mon Ceci est disponible dans Ruby 1.8.7 et plus tard. Si vous utilisez toujours Ruby 1.8.6, vous pouvez to_h code> : BackPorts code> gem et exiger 'BackPorts / 2.1 .0 / array / to_h ' code> ou autre utilisez hachage [] code> : p> nécessite "BackPorts / 1.8.7 / hachage / constructeur" code> , mais vous pouvez aussi bien utiliser le to_h code> BackPort. p> p>
@ Marc-Andre Lafortune: Ça a l'air bien. Quel serait le code dans mon cas? @post [Forum_ID] = @post_csv_order code> me donne un hachage de tableaux pas hachage de hachage.
Vous avez appelé hash []? Voir ma réponse mise à jour. N'oubliez pas d'exiger des backports si vous utilisez 1.8.6
J'ai essayé @post [forum_id] = hachage [@post_csv_order] code> et j'ai essayé maintenant @post [forum_id] || = hachage [@post_csv_order] code>. Les deux me donne nombre impair d'arguments pour hachage (argumentError) code>
HM, pourquoi avez-vous utilisé || code> devant =?
Nombre impair d'arguments => Je pense que vous utilisez Ruby 1.8.6? Vous devez nécessiter "BackPorts" Code> à l'avance. || = voir Stackoverflow.com/Questtions/63998/ Caractéristiques cachées-of-Ruby / ...
@ Marc-Andre Lafortune: Tu as raison, ça marche maintenant. Merci de vous.
Code de travail # 1 p> Code de travail # 2 p> Code de travail # 3 p> @post [forum_id] = hachage [* @ post_csv_order.flatten] code> p> @post [forum_id] || = hachage [@post_csv_order] #requires "nécessite" BackPorts " ' code> p> h2>
Veuillez éditer votre question pour le formater correctement ...
Merci, cela arrive souvent que le formatage n'est pas correct après la soumission. Je dois vérifier ça.