2014-12-27 2 views
0

시나리오는 다음과 같습니다. 유사한 데이터를 가지고 있지만 정확한 정확한 데이터가 아닌 여러 JSON 파일이있는 디렉토리가 있습니다 (구조는 동일하지만 데이터가 반드시 같을 필요는 없습니다). 똑같다).Ruby에서 다중 해시의 교차점

모든 JSON 파일 (모든 JSON 파일의 공통 부분)간에 유사한 키를 찾아야합니다.

여기에서 너무

require 'json' 

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

같은 JSON 파일을로드, 내가 해시의 교회법을 얻을하는 방법을 모르겠어요.
나는 당신이 그렇게

require 'json' 
require 'set' 

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

같은 세트를 사용할 수 있지만이 게시물 Hashes Vs. Set Performace에 따라, 해시 (나는 그것이 사용 사례를 따라 생각하지만)

그래서 더 빨리, 어떻게 찾을 수있을 것 같다 알고 집합을 사용하지 않고 여러 해시 (키 값 쌍이 동일한 위치)의 교차점?

+1

키만 교차하거나 키 - 값 쌍이 같은 위치에 있습니까? – August

+0

@August 여기서 키 값 쌍이 동일합니다. – user2840647

답변

1

집합을 사용할 필요가 없습니다. 집합은 모든 요소가 고유하고 JSON 해시가 두 개의 동일한 키 - 값 쌍을 가지지 않을 것이라고 주장합니다. 난 그냥 정상 배열 (to_a)를 사용합니다.

한 가지 문제점은 실제로 구문 분석 된 JSON 대신 ARGVreduce(:&)을 호출한다는 것입니다. 당신은이 문제를 해결하기 위해 mapeach을 변경할 수 있습니다

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

당신이 해시 형태로이 다시 변환 할 경우 to_h를 사용할 수 있습니다.