0
votes

Conversion d'un tableau en hachage - Ruby

J'ai le tableau suivant et je veux convertir un hash avec des clés comme âge et valeurs comme le nom de la personne. De plus, je veux m'assurer que les gens du même âge appartiennent à la même clé.

hash = Hash[ages.collect {|item| [item[1], item[0]]} ]


0 commentaires

4 Réponses :


1
votes

Vous pouvez créer le hasch d'abord et boucler dans les âges collectant des membres d'âges similaires à des tableaux.

hash = Hash.new{|h,k|h[k]=Array.new()}
ages.each do |age|
  hash[age.last]<<age.first
end
p hash #{20=>["alpha", "delta"], 21=>["beta"], 23=>["charlie", "gamma"]}


0 commentaires

2
votes

L'une des solutions possibles est d'utiliser: xxx

  1. HASH # Default_Proc < / code>
  2. énumérable # chaque_with_object

0 commentaires

2
votes

Encore une autre façon de faire cela: # Transform_values ​​ avec Enumérable # Group_by XXX


4 commentaires

&: Deuxième ? Y avait-il une étiquette de rails précédemment?


Hah, je ne me souviens pas de ce qui est dans des rails vs ruby ​​pour être honnête. Et cette réponse s'appuie également sur des méthodes de support active comme je l'ai dit.


group_by est rubis énumérable pas activeupport


Merci ... comme je l'ai dit, je ne peux pas garder la trace, mais c'est bon à savoir.



1
votes
enum = ages.each_with_object({})
  #=> #<Enumerator: [["alpha", 20], ["beta", 21], ["charlie", 23],
  #     ["delta", 20], ["gamma", 23]]:each_with_object({})> 
(str,x),h = enum.next
  #=> [["alpha", 20], {}] 
str
  #=> "alpha" 
x #=> 20 
h #=> {} 
(h[x] ||= []) << str
  #=> ["alpha"] 

(str,x),h = enum.next
  #=> [["beta", 21], {20=>["alpha"]}] 

1 commentaires

Du h [x] = [* h [x], str] à la place :). Je sais que cela fait un tas de tableaux jetés, il a l'air si amusant