Вычислительная частота терминов в многомерном массиве в Ruby

StackOverflow https://stackoverflow.com/questions/2607518

Вопрос

У меня есть массив: ключи = [[«А», «А», «B»], [«A», «B», «C»]] Мне нужно найти количество раз «A», «B» «С» происходит в каждом подпараситете «ключи».

Вывод может быть хеш: [«A» => [2,1], «B» => [1,1], «C» => [0,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
}

Но вам лучше получить этот драгоценный камень в порядке ...;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top