2014-11-19 4 views
0

해시 배열을 가지고 있는데 그 중 일부는 다른 배열의 하위 집합입니다. 그것이 내가 필요로 무엇을 제공하지 않습니다 그러나 배열 내의 배열 찾기

{Bob: 1, Mary: 2, Sue: 3, Tony: 9} 
{Phil: 2, Brian: 8} 

내가 "Ruby Array Comparison Tricks"을 읽어하는,이 경우 것이다

a = [] 
a << {Bob: 1, Mary: 2, Sue: 3} 
a << {Bob:1} 
a << {Phil: 2, Brian: 8} 
a << {Bob: 1, Mary: 2, Sue: 3, Tony: 9} 

나는 독특한 슈퍼 세트의 배열을 반환해야합니다.

배열을 비교하고 하위 배열을 식별하는 루비 솔루션이 있습니까?

+0

어떤 코드를 썼습니까? 당신은 * 항상 * 첫 번째 이름/값 쌍을 키잉하고 있습니까? –

+1

세트를 사용하여 물건을 단순화 할 수 있습니다 http://www.ruby-doc.org/stdlib-2.1.5/libdoc/set/rdoc/Set.html –

답변

1

나는 이것에 대한 훌륭한 알고리즘을 모르지만 루비에서는 무차별 대입 솔루션이 매우 간단합니다. - 연산자를 사용하여 다른 배열의 보수를 찾은 다음 비어 있는지 확인하십시오. 캐스팅과 함께 해시에서도 작동하므로 코드는 다음과 유사합니다.

def superset?(ary1, ary2) 
    ary1 != ary2 && (ary2.to_a - ary1.to_a) == [] 
end 

def maximal_sets(arrays) 
    arrays.reject{ |ary2| arrays.any?{ |ary1| superset?(ary1, ary2) } } 
end 
+0

완벽한, 난 레일을 처음 사용합니다. 내 시도보다 단순 해 ... – Dercni