Используя Ruby, как просто посчитать, сколько истинно в каждом столбце массива n x m? - PullRequest
5 голосов
/ 01 августа 2010

Учитывая массив логических значений n x m:

[[true, true, false],
 [false, true, true],
 [false, true, true]]

каков простой способ вернуть "сколько истинных в этом столбце?"

результат должен быть

[1, 3, 2] 

Ответы [ 4 ]

10 голосов
/ 01 августа 2010

Используйте transpose для получения массива, где каждый подмассив представляет столбец, а затем сопоставьте каждый столбец с числом true s в нем:

arr.transpose.map {|subarr| subarr.count(true) }

Вот версия с inject, которая должна работать на 1.8.6 без каких-либо зависимостей:

arr.transpose.map {|subarr| subarr.inject(0) {|s,x| x ? s+1 : s} }
0 голосов
/ 01 августа 2010
a=[[true, true, false],
   [false, true, true],
   [false, true, true]]

a.transpose.map{|c|c.count(true)}

хитрый способ спасти еще одного персонажа

a.transpose.map{|c|c.count(!!0)}

Как отмечает Джонас, можно сыграть в гольф еще немного

a.transpose.map{|c|c.count !!0}
0 голосов
/ 01 августа 2010

Вот еще одно решение:

b.transpose.collect{|x| x.reject{|y| y != true}.length}
0 голосов
/ 01 августа 2010
array = [[true, true, false],
         [false, true, true],
         [false, true, true]]
array.transpose.map {|x| x.count {|y| y}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...