Come ordinare una matrice in Ruby per un particolare ordine?

Voglio ordinare una matrice in ordine particolare dato in un altro array.

EX: considera un array

a=["one", "two", "three"] b=["two", "one", "three"] 

Ora voglio ordinare l’array ‘a’ nell’ordine di ‘b’, es

 a.each do |t| # It should be in the order of 'b' puts t end 

Quindi l’output dovrebbe essere

 two one three 

Eventuali suggerimenti?

Array # sort_by è ciò che stai cercando.

 a.sort_by do |element| b.index(element) end 

Versione più scalabile in risposta al commento:

 a=["one", "two", "three"] b=["two", "one", "three"] lookup = {} b.each_with_index do |item, index| lookup[item] = index end a.sort_by do |item| lookup.fetch(item) end 

Se b include tutti gli elementi di a e if gli elementi sono univoci, allora:

 puts b & a 

Supponendo che a deve essere ordinato rispetto all’ordine degli elementi in b

 sorted_a = a.sort do |e1, e2| b.index(e1) <=> b.index(e2) end 

Normalmente lo uso per ordinare i messaggi di errore in ActiveRecord nell’ordine in cui appaiono i campi nel modulo.