Сравнивая два массива друг с другом - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь решить некоторые проблемы в 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Мне нужна небольшая помощь

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Если вы хотите создать новый массив, отслеживающий индекс, в котором есть совпадение голосов:

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 }
0 голосов
/ 31 мая 2018

Количество индексов 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
0 голосов
/ 31 мая 2018

Вы можете использовать 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

Sidenote: с большой буквы Array1 объявляет константу .Чтобы объявить переменную, используйте array1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...