Arrays 逻辑或两个数组中的每个条目
说我有这些Arrays 逻辑或两个数组中的每个条目,arrays,ruby,logic,addition,Arrays,Ruby,Logic,Addition,说我有这些 a = [0, 1, 0, 0, 0] b = [0, 0, 0, 1, 0] 我想要像c=a | b 得到的答案是c=[0,1,0,1,0]我会这样做: 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] 我会这样做: a = [0, 1, 0, 0, 0] b = [0, 0, 0, 1, 0] a.zip(b).map { |a, b
a = [0, 1, 0, 0, 0]
b = [0, 0, 0, 1, 0]
我想要像c=a | b
得到的答案是
c=[0,1,0,1,0]
我会这样做:
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]
我会这样做:
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]
您还可以将数组转换为数字,然后只使用二进制运算符,如果需要执行大量此类操作,应该会更快。 如果需要,可以将结果转换回数组
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
a=[0,1,0,0,0]
b=[0,0,0,1,0]
a_编号=a.连接到i(2)
b_编号=b.连接到i(2)
c_数=a_数| b_数
c_数组=c_编号。到_s(2)。拆分(“”)。映射(&:到_i)
如果c_array.size
您还可以将数组转换为数字,然后只使用二进制运算符,如果需要执行大量此类操作,应该会更快。
如果需要,可以将结果转换回数组
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
a=[0,1,0,0,0]
b=[0,0,0,1,0]
a_编号=a.连接到i(2)
b_编号=b.连接到i(2)
c_数=a_数| b_数
c_数组=c_编号。到_s(2)。拆分(“”)。映射(&:到_i)
如果c_array.size
您正在使用整数的位对数组的元素进行位旋转,这是一种相当迂回的方式。我建议您直接处理整数:
x = 8
y = 2
注:
或者说,
x.to_s(2).rjust(8,"0") #=> "00001000"
y.to_s(2).rjust(8,"0") #=> "00000010"
现在,您只需使用以下工具即可获得所需的结果:
让我们确认一下:
z.to_s(2) #=> "1010"
要检索位i
(i=1
),请使用:
要设置位i,需要使用(发音为“XOR”)。对于i=1
y = y ^ (1<<1) #=> 0
类似地(y
现在等于2
)
y |=(1“100000010”
您正在使用整数的位对数组的元素进行位旋转,这是一种相当迂回的方式。我建议您直接处理整数:
x = 8
y = 2
注:
或者说,
x.to_s(2).rjust(8,"0") #=> "00001000"
y.to_s(2).rjust(8,"0") #=> "00000010"
现在,您只需使用以下工具即可获得所需的结果:
让我们确认一下:
z.to_s(2) #=> "1010"
要检索位i
(i=1
),请使用:
要设置位i,需要使用(发音为“XOR”)。对于i=1
y = y ^ (1<<1) #=> 0
类似地(y
现在等于2
)
y |=(1“100000010”
欢迎使用堆栈溢出。请阅读“”。您的问题没有显示任何需要进行的研究或努力。就好像您正在寻找答案,而这不是堆栈溢出的原因。请告诉我们您在哪里搜索了答案以及为什么这些答案对您不起作用,或者向我们展示您尝试编写的内容并解释错误。欢迎使用堆栈溢出。请阅读“”。您的问题没有显示任何需要进行的研究或努力。就好像您正在寻找答案,而这不是堆栈溢出的原因。请告诉我们您在哪里搜索了答案,以及为什么这些答案对您不起作用,或者向我们展示您尝试编写的内容并解释错误。回答很好。+1;与我的想法大致相同我已经说过了。回答得很好。+1;和我本来会说的差不多。
y ^= (1<<1)
y |= (1<<1) #=> 2
y |= (1<<9) #=> 514
y.to_s(2) #=> "1000000010"