어떻게 스칼라 문자열 (내림차순)의 길이 정렬 방법을 해체하는?

시간 :

나는 길이로 내림차순으로 문자열의 컬렉션을 정렬이 코드 조각을 건너 온 :

words.sortBy(x => -x.length)

누군가의 도움이 날의 목적을 이해하기 위해 할 수있는 -앞이 x하고 조각하여이 코드 조각을 해체? 그것은 '반대'작업에 서 있습니까? 나는 그것의 정수 연산을 알고 있지만 알고리즘은 백그라운드에서 작동 내가 어떻게 알아내는 힘든 시간을 보내고 있습니다. 또한이는 거품 정렬로 간주 될 수 있는가?

마태 복음 Kubuszok :

당신이 가지고 있다면:

val collection: SomeCollection[A]
val keyToSortBy A => B

때 당신이 할 :

collection.sortBy(keyToSortBy)

무슨 일하는 스칼라를 찾을 것입니다 Ordering[B]자사의 암시 적 범위 (당신이 아직 익숙하지 않은 경우 implicits에 대해 읽기), 그리고 알고리즘을 정렬하여 elemetns을 비교하기 위해이 interrface에서 제공하는 방법을 사용합니다.

sortBy사용 Ordering[X]오름차순으로 일을 (생각 정렬 Comparator자바를 알고있는 경우). 에 대한 Ordering[Int]것이 단지, 정수의 순서를 증가하고있어 Ordering[String]당신의 어휘 순서가 Strings.

어떤 -여기 일은하여 알고리즘의 분류에 전달하기 전에 값을 가지고있다 Int그것을 부정. 당신은 몇 가지 예를 들어 보면 그것은 쉽게 될 것입니다 :

List("a", "bb", "ccc").sortBy(word => word.length)
// imagine that what it does is:
// - building a collection of pairs ("a", 1), ("bb", 2), ("ccc", 3)
//   ( (value from collection, what function returned for that value) )
// - sorting by the second element of pair
//   using normal Int comparison to get ascending result
// - take only the first element of each pair: ("a", 1), ("bb", 2), ("ccc", 3)
List("a", "bb", "ccc") // result

우리가 넣으면 -거기, 무슨 Ordering다른 것 compate 얻을 것이다 :

List("a", "bb", "ccc").sortBy(word => -word.length)
// - building a collection of pairs ("a", -1), ("bb", -2), ("ccc", -3)
// - sorting by the second element of pair - notice that all are negative now!!!
//   using normal Int comparison to get ascending result
// - take only the first element of each pair: ("ccc", -3), ("bb", -2), ("a", -1)
List("ccc", "bb", "a") // result

추천

출처http://10.200.1.11:23101/article/api/json?id=384672&siteId=1