Разница хэшей с поправочным коэффициентом в Ruby для динамических хэшей - PullRequest
1 голос
/ 24 февраля 2011

Аналогично этому вопросу Как создать разность хэшей с поправочным коэффициентом? Я хочу сравнить хэши внутри массива, но они могут быть динамическими.

h_array = [
   {:roll => "1", :name => "saroj", :class => "mscit"}, 
   {:name => "saroj", :class => "Mscit", :roll => "12", :attendance => "P"}, 
   {:class => "Mscit", :roll => "12", :name => "saroj", :attendance => "F", :remarks => "something"}
]

get_diff(h_array, correct_factor = 2)
# should return
# matched :: {:class=>"Mscit", :roll=>"12", :name=>"saroj"},
# unmatched :: {:attendance=>"F", :remarks=>"something"}

get_diff(h_array, correct_factor = 3)
# should return 
# matched :: {:name=>"saroj"},
# unmatched :: {:class=>"Mscit", :roll=>"12", :attendance=>"F", :remarks=>"something"}

правильный_фактор - это число, которое определяет, сколько ключей / значений должно совпадать, чтобы считать, что оно соответствует. То, что я хочу, - это функция сравнения, которая возвращает как совпадающую, так и несогласованную пару.

1 Ответ

0 голосов
/ 24 февраля 2011
def get_diff(input,correct_factor)
    input_hash_merged = Hash.new
    solution_hash = Hash.new
    input.select{ |x| input_hash_merged.merge!(x) }
    input_hash_merged.each do |k,v|
        arr = Array.new
        freq = Hash.new(0)
        input.select{ |x| arr << x[k] unless x[k].nil? }
        arr.select{ |x| freq[x] += 1 }
        max_element = arr.sort_by { |x| freq[x] }.last
        max_count = freq.values.sort.last
        solution_hash[k] = max_element unless max_count < correct_factor
    end
    unmatched_hash = input_hash_merged.reject{|k,v| !solution_hash[k].nil?} 
    p solution_hash
    p unmatched_hash
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...