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アプリケーションの性能最適化

page_footer_responsive




-BackEnd
-,

執筆者:

免責事項

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


comment

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

CAPTCHA


関連記事

laravel logo

Laravelの便利メソッドupsert

1 はじめに2 upsertメソッドとは3 使い方4 タイムスタンプ5 生成SQL6 さいごに7 おすすめ書籍 はじめに LaravelでUPSERTを行いたい場合にupdateOrCreateメソッ ...

Go言語

Go 1.23 で追加された iter パッケージを使ってみる

1 はじめに1.1 iteratorとは2 push方式のイテレータ2.1 kとvを受け取るイテレータ関数2.2 イテレータ関数をチェインさせる2.3 イテレータ関数の型を利用する2.4 イテレーショ ...

Vue.js+TypeScriptな環境整備

1 はじめに2 vue-cliのインストール3 プロジェクトの作成3.1 機能の選択3.2 シンタックスの選択3.3 CSSプリプロセッサの設定3.4 Unit test3.5 E2E test3.6 ...

Vue.js入門その4〜TODOアプリにサーバーサイドを追加してみる〜

1 はじめに2 準備2.1 今回作成したいもの2.2 環境構築3 サーバーサイド3.1 DB3.2 メモ:rails generateで余分なファイルを生成しない3.3 作成したファイル4 ビューの作 ...

Stripe Connectを使って継続課金にクーポンを適用する

1 はじめに2 クーポンについて2.1 クーポンのタイプ2.2 期間2.3 引き換え回数制限2.4 その他3 クーポンの作成4 クーポンの使用4.1 定期支払にクーポンを適用4.2 Checkoutで ...

フォロー

blog-page_side_responsive

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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