我正在尝试解决ruby中的一些问题。 我正在尝试将两个阵列相互比较。
Array1 = [1,0,1,0,1,1]
Array2= [0,0,1,0,1,0]
我从用户那里得到了这个输入。然后我比较投票。如果两个人都在相同的索引上投票1
,我正在尝试将空数组增加1.
def count_votes
bob_votes = gets.chomp
alice_votes = gets.chomp
bvotes = bob_votes.split('')
avotes = alice_votes.split('')
common_upvotes = []
bvotes.each.with_index(0) do |el, i|
if bvotes[i] == 1
common_upvotes << 1
end
end
我实际上想要将avotes
与bvotes
进行比较,然后将空数组增加1.我需要一点帮助
答案 0 :(得分:4)
您可以使用Array#zip
和Enumerable#count
:
array1 = [1,0,1,0,1,1]
array2= [0,0,1,0,1,0]
array1.zip(array2)
#⇒ [[1, 0], [0, 0], [1, 1], [0, 0], [1, 1], [1, 0]]
array1.zip(array2).count { |v1, v2| v1 == v2 && v1 == 1 }
#⇒ 2
或(@engineersmnky的信用):
array1.zip(array2).count { |v1, v2| v1 & v2 == 1 }
甚至更好(归功于@Stefan):
array1.zip(array2).count { |values| values.all?(1) }
或
array1.
zip(array2).
reject { |v1, v2| v1 == 0 || v2 == 0 }.
count
#⇒ 2
旁注:大写Array1
声明常量。要声明变量,请改用array1
。
答案 1 :(得分:1)
i
为
Array1[i] == 1 && Array2[i] == 1
的数量
Array1.each_index.count { |i| Array1[i] == 1 && Array2[i] == 1 }
#=> 2
i
为
Array1[i] == 1 && Array2[i] == 1
Array1.each_index.select { |i| Array1[i] == 1 && Array2[i] == 1 }
#=> [2, 4]
i
为
Array1[i] == Array2[i]
的数量
Array1.each_index.count { |i| Array1[i] == Array2[i] }
#=> 4
答案 2 :(得分:0)
如果你想建立一个新的数组来跟踪一个匹配upvotes的索引:
a1 = [1,0,1,0,1,1]
a2= [0,0,1,0,1,0]
p [a1, a2].transpose.map {|x| x.reduce(:&)}
#=> [0, 0, 1, 0, 1, 0]
仅计算,这是另一种方式:
a1 = [1,0,1,0,1,1]
a2= [0,0,1,0,1,0]
votes = 0
a1.each_with_index do |a1, idx|
votes +=1 if (a1 + a2[idx]) == 2
end
p votes #=> 2
在一行中:
a1.each_with_index { |a1, idx| votes += 1 if (a1 + a2[idx]) == 2 }