如何用修正因子创建哈希差异? [英] How do I create a diff of hashes with a correction factor?

查看:96
本文介绍了如何用修正因子创建哈希差异?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆