2013-04-20 4 views
3

두 개의 루비 배열이 동일한 요소를 가지고 있는지 알고 싶습니다 (반드시 같은 순서 일 필요는 없습니다). 이 작업을 수행 할 원시 방법이 있습니까? Array에 대한 항등 연산자는 항목이 동일하고 순서가 동일한 지 여부를 확인하는 것으로 보이며 후자의 조건을 완화해야합니다.Ruby에서 두 개의 배열을 비교하십시오.

매우 쓰기 쉽습니다. 기본 숙어가 있는지 궁금합니다. 기본 관용구가 있다면

+0

, 그냥 비교하기 전에를 정렬 할 수 있습니다. – 9000

+3

배열에 동일한 요소가 두 번 이상있을 가능성이 있습니까? 그렇다면 무엇을하고 싶습니까? – sawa

+0

[Ruby에서 두 배열 비교하기]의 가능한 복제본 (http://stackoverflow.com/questions/9095017/comparing-two-arrays-in-ruby) –

답변

4
[2,1].uniq.sort == [1,2].uniq.sort #=> true 
[2,1,4].uniq.sort == [1,2].uniq.sort #=> false 

또는

a1 = [1,2,3] 
a2 = [2,3,1] 
p (a2-a1).empty? && (a1-a2).empty? #=> true 

a1 = [1,2,3] 
a2 = [4,3,1] 
p (a2-a1).empty? && (a1-a2).empty? #=> false 

a1 = [1,2,3] 
a2 = [2,3,1,5] 
p (a2-a1).empty? && (a1-a2).empty? #=> false 
3

이 작성하기가 매우 쉬운 것입니다, 나는 단지 궁금합니다.

고유 한 관용구가 없습니다.

배열에 두 개의 배열에 여러 개의 값을 넣으려는 경우 동일한 순서로 배열에 넣으려면 #sort을 사용해야합니다. 작업을 완료 한 후에는 쉽게 비교할 수 :

a.uniq.sort == b.uniq.sort 
:

a.sort == b.sort 

그렇지 않으면 당신이 위와 같이 #sort을 (를이 빠르게하기 위해)하고 사용하는 배열의 고유 한 값을 추출 할 것이다 #uniq을 사용할 수 있습니다 당신도 중복 항목이없는 경우

7

, 당신은 Set 대신 Array 사용할 수 있습니다

Set는 중복이없는 정렬되지 않은 값의 컬렉션을 구현합니다. 이것은 Array의 직관적 인 상호 운용 기능과 Hash의 빠른 검색 의 하이브리드입니다.

예 : 귀하의 배열의 내용을 비교할 경우

require 'set' 
s1 = Set.new [1, 2, 3] # -> #<Set: {1, 2, 3}> 
s2 = [3, 2, 1].to_set # -> #<Set: {3, 2, 1}> 
s1 == s2     # -> true 
0
a1 = [1, 2, 3, 4] 
a2 = [4, 2, 1, 3] 
(a1 & a2).size == a1.size # => true 

a3 = [1, 2, 3, 5] 
(a1 & a3).size == a1.size # => false 
+0

'a3 = [1, 2, 3, 4, 5 ]'? – Stefan

관련 문제