BackEnd

Go 1.23 でslicesとmapsに追加された関数

投稿日:

はじめに

前回の記事では Go 1.23 で追加された iter パッケージについて紹介しましたが、Go 1.23では slices パッケージと maps パッケージにも関連する関数が追加されました。

今回はそれらの関数についてまとめて紹介します。

slicesパッケージに追加された関数

slices パッケージには以下の関数が追加されました。

関数名 関数の説明
All slice内のindexとvalueのペアをiteratorとして返す
Backward Allと同様の返却値を逆順で返す
Values sliceの要素を順番に返すiteratorを返す
AppendSeq appendしたsliceを返すiteratorを返す
Collect iteratorをsliceに変換する
Sorted iteratorをsliceに変換した上でsortする
SortedFunc ソート関数を渡せるSorted
SortedStableFunc ソート関数を渡した上で安定ソートしたSorted
Chunk 指定した要素数毎に区切ったiteratorを返す

それぞれの関数について見ていきます。

All

Allはシンプルにsliceをiteratorに変換して返します。

Allのシグネチャは以下のとおりです。

func All[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]

使用例

実行結果

Backward

BackwardはAllを逆順で返したものです。

Backwardのシグネチャは以下のとおりです。

func Backward[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]

使用例

実行結果

Values

Valuesはsliceを引数が1つのiteratorに変換します。

Valuesのシグネチャは以下のとおりです。

func Values[Slice ~[]E, E any](s Slice) iter.Seq[E]

使用例

実行結果

ちなみに、 iter.Seq[E] (返り値が1つ)では、sliceを渡した時のようにindexを受け取ろうとするとエラーになります。

エラーメッセージ

AppendSeq

AppendSeqはsliceにiteratorの返却値をappendしたsliceを返します。

AppendSeqのシグネチャは以下のとおりです。

func AppendSeq[Slice ~[]E, E any](s Slice, seq iter.Seq[E]) Slice

使用例

実行結果

Collect

Collectはiteratorをsliceに変換します。

Collectのシグネチャは以下のとおりです。

func Collect[E any](seq iter.Seq[E]) []E

使用例

実行結果

SortedFunc

SortedFuncはiteratorをsliceに変換した上で、引数で渡した関数でsortした結果を返します。

なお、 Sorted および SortedStableFunc については、 SortedFunc の使い方と近しいため省略します。

SortedFuncのシグネチャは以下のとおりです。

func SortedFunc[E any](seq iter.Seq[E], cmp func(E, E) int) []E

使用例

実行結果

Chunk

Collectはsliceを指定した要素数毎に区切ったiteratorに変換して返します。

Collectのシグネチャは以下のとおりです。

func Chunk[Slice ~[]E, E any](s Slice, n int) iter.Seq[Slice]

使用例

実行結果

mapsパッケージに追加された関数

maps パッケージには以下の関数が追加されました。

関数名 関数の説明
All mapをkeyとvalueのペアを返すiteratorに変換する
Keys mapのkeyを返すiteratorに変換する
Values mapのvalueを返すiteratorに変換する
Insert mapにiteratorのkeyとvalueを追加する
Collect iteratorをmapに変換する

それぞれの関数について見ていきます。

All

Allはシンプルにmapをiteratorに変換して返します。

Allのシグネチャは以下のとおりです。

func All[Map ~map[K]V, K comparable, V any](m Map) iter.Seq2[K, V]

使用例

実行結果

Keys

Keysはmapのkeyを返すiteratorを返します。

Keysのシグネチャは以下のとおりです。

func Keys[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[K]

使用例

実行結果

Values

Valuesはmapのvalueを返すiteratorを返します。

Valuesのシグネチャは以下のとおりです。

func Values[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[V]

使用例

実行結果

Insert

Insertはmapにiteratorのkeyとvalueを追加したmapを返します。この際、keyが重複する場合はiteratorのvalueで上書きされます。

Insertのシグネチャは以下のとおりです。

func Insert[Map ~map[K]V, K comparable, V any](m Map, seq iter.Seq2[K, V])

使用例

実行結果

Collect

Collectはiteratorをmapに変換して返します。

Collectのシグネチャは以下のとおりです。

func Collect[K comparable, V any](seq iter.Seq2[K, V]) map[K]V

使用例

実行結果

さいごに

前回紹介した iter パッケージに関連する新しい関数について紹介しました。

おすすめ書籍

初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド Go言語 100Tips ありがちなミスを把握し、実装を最適化する impress top gearシリーズ 効率的なGo ―データ指向によるGoアプリケーションの性能最適化

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Go言語

Go 1.18のWorkspacesモードでマルチモジュール化

1 はじめに2 マルチモジュール構成2.1 非Workspacesモードの場合2.2 Workspacesモードの場合3 go workコマンド3.1 init3.2 edit3.3 sync3.4 ...

rails

私たちのFactoryGirlとRspecの使用ルール その1

1 はじめに2 そもそもなぜ基本ルールなどを作成しようとしたのか?3 Rspec編3.1 describe、context、itの階層で使用する3.2 10個以上のテストレコードを作成したい場合は、ト ...

laravel logo

[Laravel] middlewareでHTTPリクエストの前後に処理を入れる

1 はじめに2 middlewareとは3 実装3.1 middleware作成3.2 コード実装4 middleware定義4.1 常に呼び出す4.2 特定のURLにアクセスした時のみ呼び出す4.3 ...

Go言語

sqlcを使ってSQLファイルからGoのコードを生成する

1 はじめに2 sqlcとは2.1 コード解析2.2 サポートする言語とデータベース3 sqlcでコードを生成する3.1 準備3.2 DDLを書く3.3 クエリを書く3.4 コードを生成する3.5 生 ...

rails

関連するモデルのレコードを一緒に作成する方法

1 はじめに1.1 前提条件2 実装2.1 モデルの作成2.2 コントローラの作成2.3 Viewの作成3 さいごに はじめに フォームからレコードを作成する際に、関連するモデルのレコードを一緒に作成 ...

フォロー

blog-page_side_responsive

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。