ホームページ バックエンド開発 Golang Golang ソート パッケージの使用方法について話しましょう

Golang ソート パッケージの使用方法について話しましょう

Apr 03, 2023 am 09:19 AM

Golang は、サーバーサイド開発やシステム プログラミングで広く使用されている、効率的でシンプルかつ信頼性の高いプログラミング言語です。 Golang では、sort パッケージにより、さまざまなソートのニーズに対応できる豊富なソート機能が提供されます。この記事では、Golangのsortパッケージの使い方を紹介します。

  1. sort パッケージの概要

sort パッケージは、[]int、[]float64、[]string などのさまざまなタイプのシーケンスに基づいて並べ替える関数を提供します。また、カスタム タイプの並べ替えを定義するために使用できる、一般的な並べ替えインターフェイス sort.Interface も提供します。ソート パッケージによって提供されるソート アルゴリズムは、最適化されたクイック ソートとヒープ ソートです。 sort パッケージには、Sort、Reverse、IsSorted という 3 つの主要な関数があります。

  1. Sort 関数

Sort 関数は、sort.Interface を実装したシーケンスを昇順にソートします。 sort.Interface インターフェイスは、Len、Swap、Less の 3 つのメソッドを定義します。このうち、Len メソッドはシーケンスの長さを返し、Swap メソッドは 2 つの要素の位置を交換し、Less メソッドは位置 i の要素が位置 j の要素より小さいかどうかを返します。例は次のとおりです。

package main

import (
    "fmt"
    "sort"
)

type persons []struct {
    name string
    age  int
}

func (ps persons) Len() int {
    return len(ps)
}

func (ps persons) Swap(i, j int) {
    ps[i], ps[j] = ps[j], ps[i]
}

func (ps persons) Less(i, j int) bool {
    return ps[i].age < ps[j].age
}

func main() {
    ps := persons{{"Tom", 25}, {"Jerry", 20}, {"Alice", 30}}
    sort.Sort(ps)
    fmt.Println(ps)
}
ログイン後にコピー

出力結果は次のとおりです。

[{Jerry 20} {Tom 25} {Alice 30}]
ログイン後にコピー
  1. Reverse 関数

Reverse 関数は、次のシーケンスの逆シーケンスを返します。 sort.Interface インターフェイスを実装します。例は次のとおりです。

package main

import (
    "fmt"
    "sort"
)

func main() {
    ns := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
    sort.Sort(sort.Reverse(sort.IntSlice(ns)))
    fmt.Println(ns)
}
ログイン後にコピー

出力結果は次のとおりです。

[9 6 5 5 5 4 3 3 2 1 1]
ログイン後にコピー
  1. IsSorted 関数

IsSorted 関数は、並べ替えを実装するシーケンスかどうかを判断します。インターフェイスは Less メソッドに従っています。ルールはソートされています。例は次のとおりです:

package main

import (
    "fmt"
    "sort"
)

func main() {
    ns := []int{1, 2, 3, 3, 4, 5}
    fmt.Println(sort.IsSorted(sort.IntSlice(ns)))
    ns = []int{1, 2, 3, 4, 3, 5}
    fmt.Println(sort.IsSorted(sort.IntSlice(ns)))
}
ログイン後にコピー

出力結果は次のとおりです:

true
false
ログイン後にコピー
  1. カスタム タイプの並べ替え

カスタム タイプの特定の属性に基づいて並べ替えることもできます。種類。例は次のとおりです:

package main

import (
    "fmt"
    "sort"
)

type Person struct {
    Name string
    Age  int
}

type Persons []*Person

func (ps Persons) Len() int {
    return len(ps)
}

func (ps Persons) Swap(i, j int) {
    ps[i], ps[j] = ps[j], ps[i]
}

func (ps Persons) Less(i, j int) bool {
    return ps[i].Age < ps[j].Age
}

func main() {
    ps := Persons{{"Tom", 25}, {"Jerry", 20}, {"Alice", 30}}
    sort.Sort(ps)
    for _, p := range ps {
        fmt.Printf("%s %d\n", p.Name, p.Age)
    }
}
ログイン後にコピー

出力結果は次のとおりです:

Jerry 20
Tom 25
Alice 30
ログイン後にコピー

概要:

Golang ソート パッケージは、さまざまな種類のシーケンスをソートできる強力なソート機能を提供します。 sort.Interface インターフェイスを使用して、カスタム タイプの並べ替えを定義することもできます。ソート パッケージによって提供されるソート アルゴリズムは、クイック ソートとヒープ ソートが最適化されているため、より効率的です。 sort パッケージ全体は使いやすく、ロジックが明確で、Golang には欠かせないパッケージです。

以上がGolang ソート パッケージの使用方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Goでユニットテストをどのように書きますか? Goでユニットテストをどのように書きますか? Mar 21, 2025 pm 06:34 PM

Goでユニットテストをどのように書きますか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

See all articles