반응형
배열에 다른 배열의 값이 포함되어 있습니까?
배열에 두 번째 배열의 요소가 포함되어 있는지 테스트하는 가장 효율적인 방법은 무엇입니까?
아래의 두 가지 예는 질문에 답하려고 시도하는 것입니다.foods
의 요소를 포함합니다.cheeses
:
cheeses = %w(chedder stilton brie mozzarella feta haloumi reblochon)
foods = %w(pizza feta foods bread biscuits yoghurt bacon)
puts cheeses.collect{|c| foods.include?(c)}.include?(true)
puts (cheeses - foods).size < cheeses.size
(cheeses & foods).empty?
마크-앙드레 라포르투가 논평에서 말했듯이,&
선형 시간 내에 작동하는 동안any?
+include?
2차가 됩니다.데이터 집합이 클수록 선형 시간이 더 빠릅니다.작은 데이터 세트의 경우any?
+include?
Lee Jarvis의 대답에서 알 수 있듯이 더 빠를 수도 있습니다 -- 아마도 왜냐하면.&
에서는 새 배열을 할당하지만 다른 솔루션은 할당하지 않고 부울을 반환하는 단순 중첩 루프로 작동합니다.
Enumerable #any는 어떻습니까?
>> cheeses = %w(chedder stilton brie mozzarella feta haloumi)
=> ["chedder", "stilton", "brie", "mozzarella", "feta", "haloumi"]
>> foods = %w(pizza feta foods bread biscuits yoghurt bacon)
=> ["pizza", "feta", "foods", "bread", "biscuits", "yoghurt", "bacon"]
>> foods.any? {|food| cheeses.include?(food) }
=> true
벤치마크 스크립트:
require "benchmark"
N = 1_000_000
puts "ruby version: #{RUBY_VERSION}"
CHEESES = %w(chedder stilton brie mozzarella feta haloumi).freeze
FOODS = %w(pizza feta foods bread biscuits yoghurt bacon).freeze
Benchmark.bm(15) do |b|
b.report("&, empty?") { N.times { (FOODS & CHEESES).empty? } }
b.report("any?, include?") { N.times { FOODS.any? {|food| CHEESES.include?(food) } } }
end
결과:
ruby version: 2.1.9
user system total real
&, empty? 1.170000 0.000000 1.170000 ( 1.172507)
any?, include? 0.660000 0.000000 0.660000 ( 0.666015)
교차로가 비어 있는지 확인할 수 있습니다.
cheeses = %w(chedder stilton brie mozzarella feta haloumi)
foods = %w(pizza feta foods bread biscuits yoghurt bacon)
foods & cheeses
=> ["feta"]
(foods & cheeses).empty?
=> false
require "benchmark"
N = 1_000_000
puts "ruby version: #{RUBY_VERSION}"
CHEESES = %w(chedder stilton brie mozzarella feta haloumi).freeze
FOODS = %w(pizza feta foods bread biscuits yoghurt bacon).freeze
Benchmark.bm(15) do |b|
b.report("&, empty?") { N.times { (FOODS & CHEESES).empty? } }
b.report("any?, include?") { N.times { FOODS.any? {|food| CHEESES.include?(food) } } }
b.report("disjoint?") { N.times { FOODS.to_set.disjoint? CHEESES.to_set }}
end
user system total real
&, empty? 0.751068 0.000571 0.751639 ( 0.752745)
any?, include? 0.408251 0.000133 0.408384 ( 0.408438)
disjoint? 11.616006 0.014806 11.630812 ( 11.637300)
Set.new(cheeses).disjoint? Set.new(foods)
언급URL : https://stackoverflow.com/questions/3941945/array-include-any-value-from-another-array
반응형
'IT' 카테고리의 다른 글
루비의 대장 연산자는 무엇입니까? (0) | 2023.06.02 |
---|---|
반복하는 동안 값 변경 (0) | 2023.06.02 |
루비에서 해시를 복사하려면 어떻게 해야 합니까? (0) | 2023.06.02 |
SQL Server 날짜/시간 LIKE 선택? (0) | 2023.06.02 |
"이전 형제" 선택기가 있습니까? (0) | 2023.06.02 |