代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

使用Ruby,计算nxm数组的每列中有多少个true的简单方法是什么?

  •  5
  • nonopolarity  · 技术社区  · 14 年前

    n m 布尔值数组:

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

    有什么简单的方法可以返回“该列中有多少个true?”

    [1, 3, 2] 
    
    4 回复  |  直到 9 年前
        1
  •  10
  •   sepp2k    14 年前

    使用转置得到一个数组,其中每个子数组表示一列,然后将每列映射到 true 其中包括:

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

    以下是一个带有inject的版本,该版本应在1.8.6上运行,且不存在任何依赖项:

    arr.transpose.map {|subarr| subarr.inject(0) {|s,x| x ? s+1 : s} }
    
        2
  •  0
  •   igorgue    14 年前
    array = [[true, true, false],
             [false, true, true],
             [false, true, true]]
    array.transpose.map {|x| x.count {|y| y}}
    
        3
  •  0
  •   You    14 年前

    b.transpose.collect{|x| x.reject{|y| y != true}.length}
    
        4
  •  0
  •   John La Rooy    14 年前
    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}