Sie könnten die Hashes zu sets konvertieren und als führten die Überprüfung mit den Methoden subset?
und superset?
(oder ihre jeweiligen Pseudonyme <=
und >=
):
aktualisieren: ein Benchmark der vorgeschlagenen Lösungen:
require 'fruity'
require 'set'
hash = ('aa'..'zz').zip('aa'..'zz').to_h
# {"aa"=>"aa", "ab"=>"ab", ...
find = ('aa'..'zz').zip('aa'..'zz').select { |k, _| k[0] == k[1] }.to_h
# {"aa"=>"aa", "bb"=>"bb", ...
compare(
toro2k: -> { hash.to_set >= find.to_set },
MarekLipka: -> { hash.merge(find) == hash },
CarySwoveland: -> { (find.to_a - hash.to_a).empty? },
ArupRakshit: -> { arr = hash.to_a; find.all? { |pair| arr.include?(pair) } }
)
Ergebnis:
Running each test 2 times. Test will take about 1 second.
MarekLipka is faster than toro2k by 3x ± 0.1
toro2k is faster than CarySwoveland by 39.99999999999999% ± 10.0%
CarySwoveland is faster than ArupRakshit by 1.9x ± 0.1
Matt, Sie scheinen mit einer [Qual der Wahl] (http verliehen worden zu sein: //dictionary.cambridge. org/dictionary/british/an-peinlichkeit-von-riches). (Link für diejenigen, für die Englisch eine zweite Sprache ist.) Es ist ziemlich selten, vier von vier qualitativen Antworten auf SO zu bekommen. –