2011-08-11 5 views
1

하나의 Ruby 해시에 다른 키가 존재하지 않는 키가 있는지 알아 보는 가장 빠른 방법 (또는 가장 빠른 방법)은 무엇입니까? 해시가이를 위해 가장 효율적인 데이터 구조라고 가정하고 있지만 Set에 물건을 넣는 것과 같은 것에 대해서는 공개되어 있습니다. 그것을 위해 빨리으로한 해시의 키가 다른 해시에 존재하지 않는지 확인하십시오.

hash1.keys - hash2.keys 

당신의 결과는, hash2

답변

8
a = { :a => 1, :b => 2 , :v => 3} 
b = { :a => 3, :b => 22 , :g => 3} 
a.keys - b.keys 
#=> [:v] 
b.keys - a.keys 
#=> [:g] 
3

하는 간단한 방법은 무엇인가 같다 나 (코더). 그러나 "빠른"을 요구하고 "컴퓨터에서 빠름"을 의미 할 수도 있으므로이 값을 호출 할 때마다 두 세트의 키를 모두 지나쳐야한다는 것을 알고 있어야합니다. 이 때로 믿을 경우

def same_keys?(a, b) 
    a.length == b.length && a.keys.all?{ |k| b.key?(k) } 
end 

당신은 조기을 얻을 :

자주이 작업을 수행해야하고, 당신이 정말로 단지 당신이 뭔가를 할 수있는 누락 될 수 있습니다 어떤 키가있는 경우 신경 경우

동일한 수의 키가 없으면 다른 키에없는 키가 발견되면 조기에 조기에 꺼내십시오. 배열 집합 수학을 사용하는보다 강력한 대답과는 달리 한 해시에는 몇 개의 키 또는 어떤 키가 있는지는 알지 못합니다.

참고 : 이 아닌데은 벤치마킹이 빠르다는 것을 보여줍니다. 배열 수학이 C로 구현되었다고 가정하면all?을 호출하고 모든 키에 대해key?메서드를 호출하는 것이 신경 쓰이는 많은 해시에 대한 전체 배열 배열을 가져 오는 것보다 속도가 느릴 수 있습니다.

관련 문제