Ruby 如何创建具有校正因子的散列差?
我想比较数组中的哈希:Ruby 如何创建具有校正因子的散列差?,ruby,hash,Ruby,Hash,我想比较数组中的哈希: 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_fact
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"}]]
我想区分h\u数组中包含的散列。它看起来像一个递归调用/方法,因为h_数组
可以有多个散列,但具有相同数量的键和值。如何实现get_diff
方法?类数组
class Array
def find_ndups # also returns the number of items
uniq.map { |v| diff = (self.size - (self-[v]).size); (diff > 1) ? [v, diff] : nil}.compact
end
end
h_array = [
{:name => "John", :age => 22, :eye_color => "blue", :hair => "black"},
{:name => "John", :age => 33, :eye_color => "orange", :hair => "green"},
{:name => "John", :age => 22, :eye_color => "black", :hair => "yello"}
]
def get_diff(h_array, correct_factor)
temp = h_array.inject([]){|result, element| result << element.to_a}
master_array = []
unmatched_arr = []
matched_arr = []
temp = temp.transpose
temp.each_with_index do |arr, index|
ee = arr.find_ndups
if ee.length == 0
unmatched_arr << temp[index].inject([]){|result, arr| result << {arr.first => arr.last} }
elsif ee.length > 0 && ee[0][1] != correct_factor && ee[0][1] < correct_factor
return_arr << temp[index].inject([]){|result, arr| result << {arr.first => arr.last} }
elsif ee[0][1] = correct_factor
matched_arr << temp[index].inject([]){|result, arr| result << {arr.first => arr.last} }
end
end
return [matched_arr, unmatched_arr]
end
puts get_diff(h_array, 2).inspect
def find_ndups还返回项目数
uniq.map{v | diff=(self.size-(self-[v]).size);(diff>1)?[v,diff]:nil}.compact
结束
结束
h_数组=[
{:name=>“John”,:age=>22,:eye\u color=>“blue”,:hair=>“black”},
{:name=>“John”,:age=>33,:eye\u color=>“orange”,:hair=>“green”},
{:name=>“John”,:age=>22,:eye_color=>“black”,:hair=>“yello”}
]
def get_diff(h_阵列,正确系数)
temp=h_数组。inject([]){| result,element | result找到了这个。
ActiveSupport 2.3.2和2.3.4有一个内置的Hash::Diff模块,它返回一个表示两个哈希之间差异的哈希。数组中哈希的键是否总是相同的?correct\u factor
的含义是什么?我不明白correct\u factor
是什么意思?@macarthy他总是一样,但是密钥的名称和总数总是相同的。@ Mladen,JAMIEI,<代码>改正因子> /Cord>是决定多少个键/值应该匹配以考虑它匹配的数字。
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