0

私は配列を持っています: keys=[["a","a","b"],["a","b","c"]] "a","b の回数を見つける必要があります","c" は、「keys」の各サブ配列で発生します。

出力はハッシュになる可能性があります: ["a"=> [2,1],"b"=>[1,1],"c"=>[0,1]]

4

1 に答える 1

4

おそらく最速ではありませんが、おそらく最短の1つです。

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

また

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

これが1.8.6バージョンのショットです。

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

しかし、あなたはすぐにそのバックポートの宝石を手に入れたほうがいいです...;)

于 2010-04-09T13:05:02.313 に答える