2013-07-06 8 views
0

비슷한 값을 가진 배열을 그룹화하는 똑똑한 방법을 찾고 있습니다 (동일한 순서 일 필요는 없습니다). 내가 사용하고있는 언어는 루비이지만 문제는 꽤 언어에 구애받지 않는다고 생각합니다.비슷한 값을 가진 배열을 그룹화하는 방법

을 감안할 때

a = ['foo', 'bar'] 
b = ['bar', 'foo'] 
c = ['foo', 'bar', 'baz'] 
d = ['what', 'ever', 'else'] 
e = ['foo', 'baz', 'bar'] 

내가

  • & b는
  • C & 전자 하나 명의 그룹에있는 한 그룹
  • 을에 저를 알려주는 기능을 가지고 싶습니다 d가 자신의 그룹 임

각 배열의 값을 각 배열의 값과 비교할 수있는 것처럼 매우 비효율적 인 방법을 여러 가지 방법으로 생각할 수 있습니다. 또는 배열의 모든 조합에 대해 ((a - b) + (b - a)). 길이 == 0인지 확인하고 결과가 0 인 그룹을 그룹화 할 수 있습니다. 또는 a.sort == b인지 확인할 수 있습니다. 배열의 모든 조합을 정렬합니다.

나는 내 앞에 누군가가이 문제를보다 효율적으로 해결했다고 확신한다. 나는 방법을 찾을 수없는 것 같습니다.

답변

2

"배열의 모든 조합에 대해"수행하지 않고 sort으로 수행 할 수 있지만 모든 배열 (Schwartzian 변환)에 대해서만 수행합니다.

arrays = [a, b, c, d, e] 
arrays.group_by{|array| array.sort}.values 
관련 문제