Domanda

Ho un array: tasti = [[ "a", "a", "b"], [ "a", "b", "c"]] Ho bisogno di trovare il numero di volte in cui "a", "b", "c" si verifica in ogni sotto-serie di 'chiavi'.

uscita potrebbe essere un hash: [ "a" => [2,1], "b" => [1,1], "c" => [0,1]]

È stato utile?

Soluzione

Forse non il più veloce, ma probabilmente tra i più breve:

Hash[
  keys.flatten.uniq.map{|e|
    [e, keys.map{|ar| ar.count(e)}]
  }
]
=> {"a"=>[2, 1], "b"=>[1, 1], "c"=>[0, 1]}

o

keys.flatten.uniq.inject({}){|acc,e|
  acc.merge({e => keys.map{|ar| ar.count(e)}})
}

Ecco un colpo a 1.8.6 versione:

keys.flatten.uniq.inject({}){|acc,e|
  acc[e] = keys.map{|ar|
    ar.select{|c| c==e}.size
  }
  acc
}

Ma è meglio avere che backport gioiello presto ...;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top