2014-12-27 62 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