Comment déconstruire la méthode de tri pour la longueur des chaînes (décroissant) à Scala?

heure:

Je suis tombé sur ce morceau de code qui trie une collection de chaînes en ordre décroissant par longueur:

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

Aider quelqu'un peut me comprendre quel est le but de -devant xest et déconstruire ce morceau de code par pièce? Est - il debout pour l' opération « inverse »? Je sais que le fonctionnement de entier mais je vais avoir du mal à comprendre comment l'algorithme fonctionne en arrière - plan. Peut - il être considéré comme une sorte de bulle?

Matthew Kubuszok:

Si tu as:

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

quand vous faites:

collection.sortBy(keyToSortBy)

ce qui se passe est que Scala va chercher Ordering[B]dans son champ d' application implicite (lire implicits si vous n'êtes pas familier avec eux encore), et il utilisera des méthodes fournies par cette interrface pour comparer elemetns par l' algorithme de tri.

sortByutilisera Ordering[X]pour trier les choses dans l' ordre croissant (pensez Comparatorsi vous connaissez Java). Pour Ordering[Int]cela de plus en plus l' ordre juste des entiers, car Ordering[String]vous avez un ordre lexical de Strings.

Que -fait ici est de prendre la valeur avant de passer au tri de l' algorithme par Intet niant. Il serait plus facile si vous voyez quelques exemples:

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

Si nous mettons -là - bas, ce qui Orderingarriverait à compate serait différent:

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

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=384384&siteId=1
conseillé
Classement