Учитывая два массива, каков наиболее эффективный способ их двоичного перекрытия? - PullRequest
1 голос
/ 29 марта 2019

Учитывая:

a = ["thing1", "thing2", "thing3", "thing4", "thing5", "thing6"]
b = ["thing3", "thing4", "thing5"]

Я ищу наиболее эффективный способ получить это:

result #=> [0, 0, 1, 1, 1, 0]

Должен быть способ лучше, чем O (n ^ 2).

a.map{|v| b.include?(v) ? 1 : 0}

Ответы [ 2 ]

4 голосов
/ 30 марта 2019
require 'set'

bs = b.to_set
  #=> #<Set: {"thing3", "thing4", "thing5"}> 
a.map { |s| bs.include?(s) ? 1 : 0 }
  #=> [0, 0, 1, 1, 1, 0] 

Наборы реализованы с хешем под крышками, поэтому поиск по множеству аналогичен поиску по хешу с точки зрения скорости выполнения.

4 голосов
/ 29 марта 2019
c = b.to_h{|e| [e, true]}
a.map{|e| c[e] ? 1 : 0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...