【问题标题】:Logical or every entry in two arrays逻辑或两个数组中的每个条目
【发布时间】:2015-11-12 16:13:30
【问题描述】:

说我有这些

a = [0, 1, 0, 0, 0]
b = [0, 0, 0, 1, 0]

我想要c = a | b之类的东西 并得到c = [0, 1, 0, 1, 0]的答案。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读“How to Ask”。您的问题没有显示任何研究或努力,这是需要做的。就像您在寻找答案一样,这不是 Stack Overflow 的意义所在。请告诉我们您在哪里搜索过答案以及为什么这些答案不适合您,或者向我们展示您尝试编写的内容并解释错误。

标签: arrays ruby logic addition


【解决方案1】:

我会这样做:

a = [0, 1, 0, 0, 0] 
b = [0, 0, 0, 1, 0]

a.zip(b).map { |a, b| a | b }
#=> [0, 1, 0, 1, 0]

【讨论】:

    【解决方案2】:

    您正在对数组元素的整数位进行位旋转,这是一种相当迂回的方法。我建议你直接处理整数:

    x = 8
    y = 2
    

    注意:

    x.to_s(2) #=> "1000"
    y.to_s(2) #=> "10"
    

    或者说,

    x.to_s(2).rjust(8,"0") #=> "00001000"
    y.to_s(2).rjust(8,"0") #=> "00000010"
    

    现在您可以通过Fixnum#| 非常简单地获得您想要的结果:

    z = x | y #=> 10
    

    让我们确认一下:

    z.to_s(2) #=> "1010"
    

    要检索位 i (i=1),请使用 Fixnum#[]

    y[0]  #=> 0
    y[1]  #=> 1
    y[2]  #=> 0
    y[99] #=> 0
    

    要设置第 i 位,您需要使用Fixnum#<< 来获得一个整数,该整数在位位置i0 中的所有其他位位置都有一个1

    1 << i
    

    例如:

    1 << O #=> 1
    1 << 1 #=> 2
    1 << 2 #=> 4
    

    或者,你当然可以写:

    2**i
    

    要将位i 设置为0,请使用Fixnum#^(发音为“XOR”)。对于i=1

    y = y ^ (1<<1) #=> 0
    

    我们可以更简洁地表示为:

    y ^= (1<<1)
    

    将位i 设置为1,对于i=1,(回忆y 现在是0):

    y |= (1<<1) #=> 2
    

    同样(y 现在等于 2),

    y |= (1<<9) #=> 514
    y.to_s(2)   #=> "1000000010"
    

    【讨论】:

    • 很好的答案。 +1;差不多就是我想说的。
    【解决方案3】:

    您也可以将数组转换为数字,然后只使用二元运算符,如果您需要执行大量此类操作,它应该会更快。 如果需要,您可以将结果转换回数组。

    a = [0, 1, 0, 0, 0]
    b = [0, 0, 0, 1, 0]
    
    a_number = a.join.to_i(2)
    b_number = b.join.to_i(2)
    
    c_number = a_number | b_number
    
    c_array = c_number.to_s(2).split('').map(&:to_i)
    c_array = [0] * (a.size - c_array.size) + c_array if c_array.size < a.size
    
    p c_number.to_s(2)
    p c_array
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多