2009-06-05 14 views
1

여러 배열을 비교하고 해당 배열의 데이터와 일치하는 세트를 생성하고 배열 A에서만 데이터 세트를 생성하지만 배열 B에서는 생성하지 않는 코드 스 니펫을 작성해야합니다. C, D는 배열 B에 있지만 A, C, D에는없는 배열을 처리 할 수 ​​있습니다 (즉, 동적으로 반복). 코드는 스칼라에서 익명의 함수를 사용해야합니다 (예 : Java에서처럼 반복되는 일반 배열과 다름).스칼라에서 유니온, 서브셋 및 수퍼셋 처리

답변

2

나에게 숙제가 들립니다. 이렇게하는 가장 쉬운 방법은 배열 A의 내용을 Set에 넣고 remove 작업을 사용하는 것입니다. 이것은 O (n)입니다. n = \ sum {| A |, | B |, | C |, ...}. 다음 솔루션은 Array뿐만 아니라 임의의 Iterable에서 작동합니다.

def compareArrays[A](arrs: List[Iterable[A]]) = arrs match { 
    case a :: tail => { 
    val set = a.foldLeft(Set[A]()) { _ + _ } 
    tail.foldLeft(set) { _ -- _ } 
    } 

    case Nil => Nil 
}