2009-12-23 3 views
4

ActorOrdered[Actor] 특성을 구현하는 클래스 인 배열 ArrayBuffer[Actor]이있는 스칼라 배열이 있습니다. 수동으로 코딩하지 않고이 배열을 어떻게 정렬합니까?ArrayBuffer [A]를 스칼라로 정렬 하시겠습니까?

나는 Sorting이라는 객체가 있다는 것을 알고 있지만 ArrayBuffer은 올바른 클래스를 구현/확장하지 않기 때문에 작동하지 않는 것 같습니다.

유형 배열 ArrayBuffer[A]을 어떻게 정렬합니까?

답변

7

스칼라 2.8을 사용하는 경우 SeqLike 특성에서 상속 된 ArrayBuffer[T] 클래스의 sortWith 메서드를 사용할 수 있습니다.

다음 코드는 오름차순의 ArrayBuffer[T] 객체 정렬이 실제 ArrayBuffer를 변이하지 않는

def ascendingSort[T <% Ordered[T]](xs: ArrayBuffer[T]) = xs.sortWith(_ < _) 

참고하지만, 올바른 순서의 요소와 새로 만듭니다.

스칼라 2.7을 사용하는 경우 Sorting 개체의 stableSort 메서드를 사용할 수 있습니다. 이것은 ArrayBuffer의 요소를 취해 올바른 순서로 정렬 된 요소 배열을 생성합니다 (인수로 클로저가 지정되고 기본값으로 오름차순). 예를 들어

:

val a = new scala.collection.mutable.ArrayBuffer[Int]() 
a += 5 
a += 2 
a += 3 

scala.util.Sorting.stableSort(a) 

중요한 질문은 당신이 ArrayBuffer으로 수행 할 작업 것입니다. 일반적으로 Buffer은 다른 알고리즘에서 내부적으로 사용되어 중간 결과의 성능을 향상시킵니다. 이를 위해 사용하는 경우 알고리즘의 끝에서 반환 할 컬렉션을 정렬하는 방법을 살펴보십시오. Sorting 개체는 이미 ArrayBuffer을 정렬 된 Array으로 변환하는 방법을 제공합니다. 버퍼가 점진적으로

당신이 Actor의 함께 사용되기 때문에, 그것은 어떤 종류의에 사용될 수있는 요소의 시퀀스를 생성하는

을 사용하십시오 Buffer 클래스의 scaladoc에서

액터 대기열 -이 경우 Queue 컬렉션을 살펴볼 수 있습니다. Flaviu Cipcigan

+0

는, 내가 ArrayBuffer를 변이 것이 바로 그래서이 sortWith (...)를 생각 설명을 읽어 didnt한다. 감사합니다 10 억, 빠른 답변도 존중합니다.) – Felix

0

, BTW 액터 클래스는 여기에 세계에서 "배우"에 사용되는 내 자신의 클래스 스칼라에 대한 나의 새로운 게임 엔진을 사용하여 만든이 ("굉장 게임 -

에게, 희망이 도움이 Engine for Scala ~ AGES "), 동시성 배우 클래스와 아무런 관련이 없습니다. 또한 스칼라 목록의 구현은 정글입니다. 모든 것이 사용되지 않거나 여러 가지 다른 방식으로 구현됩니다. ArrayBuffer는 필자의 필요에 따라 작동합니다 (액터 포함을위한 가변 크기 배열이 필요합니다).

희망이 명확 : 내가 변경 가능한 패키지의 클래스를 발견하기 때문에 내가 바보

관련 문제