Maison  >  Article  >  développement back-end  >  Implémentation spécifique du tri Golang

Implémentation spécifique du tri Golang

WBOY
WBOYoriginal
2023-05-10 20:18:06729parcourir

Golang est un langage de programmation très populaire. Sa concurrence efficace et sa syntaxe simple en font un langage très adapté à la programmation back-end et réseau. Dans Golang, le package de tri fournit un moyen très pratique d'implémenter le tri. Il peut trier des tableaux, des tranches, des chaînes et d'autres types. Il fournit également une méthode de tri personnalisée très complète. Le package de tri sera présenté en détail ci-dessous. et le mettre en œuvre.

Fonctions intégrées du package de tri

Le package de tri fournit trois fonctions de tri intégrées :

  1. sort.Ints(a []int) : Trie les tranches de type int par ordre croissant.
  2. sort.Float64s(a []float64) : Trie les tranches de type float64 par ordre croissant.
  3. sort.Strings(a []string) : Trie les tranches de type chaîne par ordre croissant.

Voici comment utiliser ces trois fonctions intégrées :

package main

import (
    "fmt"
    "sort"
)

func main() {
    ints := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
    sort.Ints(ints)
    fmt.Println(ints)

    floats := []float64{3.1, 1.4, 4.1, 1.5, 5.9, 2.6, 5.3, 5.5, 3.5}
    sort.Float64s(floats)
    fmt.Println(floats)

    strings := []string{"golang", "is", "an", "awesome", "language"}
    sort.Strings(strings)
    fmt.Println(strings)
}

Résultats de sortie :

[1 1 2 3 3 4 5 5 5 6 9]
[1.4 1.5 2.6 3.1 3.5 4.1 5.3 5.5 5.9]
[an awesome golang is language]

tri personnalisé du package de tri

En plus des fonctions de tri intégrées, le package de tri fournit également un moyen très pratique pour personnaliser la fonction de tri. Dans Golang, nous pouvons implémenter des méthodes de tri personnalisées en implémentant l'interface sort.Interface. L'interface sort.Interface doit implémenter les trois méthodes suivantes :

type Interface interface {
    // 返回数据集合的元素数量
    Len() int
    // 比较两个元素的大小,返回是否应该交换位置
    Less(i, j int) bool
    // 交换两个元素的位置
    Swap(i, j int)
}

Nous implémentons un tri personnalisé via l'interface sort.Interface Voici un exemple de tri en fonction du nombre d'occurrences de lettres dans une chaîne :

package main

import (
    "fmt"
    "sort"
)

type StringArray []string

func (s StringArray) Len() int {
    return len(s)
}

// 自定义排序方式:按照字符串中字母出现次数升序排序
func (s StringArray) Less(i, j int) bool {
    return less(s[i], s[j])
}

// 交换两个元素的位置
func (s StringArray) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

// 判断字符串 a 是否小于字符串 b
func less(a, b string) bool {
    if len(a) < len(b) {
        return true
    } else if len(a) > len(b) {
        return false
    }

    for i := 0; i < len(a); i++ {
        if a[i] < b[i] {
            return true
        } else if a[i] > b[i] {
            return false
        }
    }

    return false
}

func main() {
    strings := StringArray{"banana", "apple", "pear", "pie"}
    sort.Sort(strings)
    fmt.Println(strings)
}

Résultat de sortie. :

[pear pie apple banana]

Comme le montre l'exemple ci-dessus, il est très pratique d'implémenter une méthode de tri personnalisée via l'interface sort.Interface. Il vous suffit d'implémenter trois méthodes. Lors du tri personnalisé, nous pouvons obtenir la méthode de tri dont nous avons besoin en comparant les tailles de deux éléments.

Remarques sur l'utilisation du package de tri

Il y a certaines choses auxquelles vous devez faire attention lorsque vous utilisez le package de tri, comme suit :

  1. Les fonctions de tri intégrées et le tri personnalisé fourni par le package de tri sont tous deux un tri ascendant. . Si vous devez trier par ordre décroissant, une fonction de tri personnalisée est requise.
  2. Lors de la personnalisation de la fonction de tri, vous devez vous assurer que le résultat de la comparaison des tailles de deux éléments peut refléter correctement la méthode de tri, en particulier lorsque plusieurs champs sont impliqués dans le tri. Lorsque vous comparez des chaînes, faites attention à l'impact de la longueur des chaînes et effectuez une comparaison alphabétique uniquement lorsque les longueurs sont identiques.
  3. le tri est trié sur place, c'est-à-dire qu'aucune nouvelle tranche ne sera créée et les tranches d'origine seront directement modifiées. Vous devez vous demander si les données d'origine doivent être conservées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Quel python golang apprendre ?Article suivant:Quel python golang apprendre ?