Подсчет символов в массивах - PullRequest
0 голосов
/ 15 мая 2018

у меня есть:

array1 = [:blue, :blue, :blue, :blue]
array2 = [:green, :green, :yellow, :red] 

Я пытаюсь подсчитать, сколько синих символов в array2, что составляет 0. Я сделал:

near_matches = 0
array1.each do |color1|
  if array2.count(color1)
    near_matches += 1
  end
end

near_matches #=> 4

В array1 нет соответствующих цветовых символов с array2, и все же я все равно получаю 4 в качестве вывода. Мне было интересно, почему вывод моего кода 4.

Ответы [ 2 ]

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

nil и false - это единственные два значения, которые оцениваются в false в Ruby.

ref: Что оценивается как ложное в Ruby?

array2.count(color1) никогда не вернет nil или false, так что near_matches всегда увеличивается, и в конце его значение равно array1.size

, вам следует использовать команду inject

array1.uniq.inject(0){ |sum,color| sum + array2.count(color) }
0 голосов
/ 15 мая 2018

count метод возвращает число, и каждое число верно в Ruby.Единственными неверными значениями являются nil и false, поэтому это выражение

near_matches += 1

всегда выполняется.Может быть, вы могли бы сделать

if array2.count(color1) > 0
  near_matches += 1
end 
...