2014-12-27 32 views
0

这种情况是这样的:我有一个目录有多个JSON文件,它们具有相似的数据,但不完全相同的数据(结构相同,但数据可能不一定是一样)。Ruby中多个哈希的交集

我需要找到所有JSON文件(即所有JSON文件的交集)之间相似的键。

我加载JSON文件,像这样

require 'json' 

ARGV.each {|x| 
    JSON.parse(File.read(x)) 
} 

从这里,我不知道如何获得哈希的交集。
我知道你可以使用套,像这样

require 'json' 
require 'set' 

ARGV.each {|x| 
    JSON.parse(File.read(x)).to_set 
}.reduce(:&) 

但按照这个帖子Hashes Vs. Set Performace,散列似乎更快(虽然我想这取决于使用情况)

所以,我怎么能找到多个哈希(键值对相同​​)的交集,而不使用Set?

+1

只有键的交集,或者键值对的位置相同? – August

+0

@八月键值对是相同的 – user2840647

回答

1

你不需要使用一套。一个集合保持所有元素都是唯一的,并且JSON哈希将永远不会有两个相同的键值对。我只是使用普通数组(to_a)。

一个问题是您实际上在ARGV上调用reduce(:&),而不是解析的JSON。您可以更改eachmap解决这个问题:

ARGV.map { |x| 
    JSON.parse(File.read(x)).to_a 
}.reduce(:&) 

如果要转换这一回一个哈希表,您可以使用to_h