如何用修正因子创建哈希差异? [英] How do I create a diff of hashes with a correction factor?
本文介绍了如何用修正因子创建哈希差异?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
h_array = [
{:name => John,:age => 23,:eye_color => blue},
{:name => John,:age => 22,:eye_color => green},
{:name => John,:age => 22,:eye_color => black}
]
get_diff(h_array,correct_factor = 2)
#应该返回[{:eye_color => blue},{:eye_color => green},{:eye_color => black}]
get_diff(h_array,correct_factor = 3)
#应该返回
#[[{:age => 23},{:年龄=> 22},{:年龄=> 22}],
#[{:eye_color => blue},{:eye_color => green},{:eye_color => black}]]
我想区分 h_array
。它看起来像递归调用/方法,因为 h_array
可以具有多个哈希,但具有相同数量的键和值。我如何实现 get_diff
方法?
解决方案
def get_diff h_array,correct_factor
h_array.first.keys.reject {| k |
h_array.map {| h | H [k]的} sort.chunk {|即| Ë} {.MAP | _,E | e.size} .max> = correct_factor
} .map {| k |
h_array.map {| hash | hash.select {|键,_ | k == key}}
}
end
I want to compare hashes inside an array:
h_array = [
{:name => "John", :age => 23, :eye_color => "blue"},
{:name => "John", :age => 22, :eye_color => "green"},
{:name => "John", :age => 22, :eye_color => "black"}
]
get_diff(h_array, correct_factor = 2)
# should return [{:eye_color => "blue"}, {:eye_color => "green"}, {:eye_color => "black"}]
get_diff(h_array, correct_factor = 3)
# should return
# [[{:age => 23}, {:age => 22}, {:age => 22}],
# [{:eye_color => "blue"}, {:eye_color => "green"}, {:eye_color => "black"}]]
I want to diff the hashes contained in the h_array
. It looks like a recursive call/method because the h_array
can have multiple hashes but with the same number of keys and values. How can I implement the get_diff
method?
解决方案
def get_diff h_array, correct_factor
h_array.first.keys.reject{|k|
h_array.map{|h| h[k]}.sort.chunk{|e| e}.map{|_,e| e.size}.max >= correct_factor
}.map{|k|
h_array.map{|hash| hash.select{|key,_| k == key}}
}
end
这篇关于如何用修正因子创建哈希差异?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文