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


関連記事

MySQLでバルクアップデート処理

1 はじめに2 使用するテーブル3 パターン数が少ないシンプルな更新4 パターン数が多い場合4.1 FIELD関数4.2 ELT関数4.3 組み合わせ4.4 パフォーマンス5 さいごに6 おすすめ書籍 ...

Stripe Connectを使ってCheckoutを利用した継続課金を実装

1 はじめに1.1 Checkoutを使う場合の動線2 決済画面への遷移2.1 マイグレーション2.2 Checkout Sessionの作成3 決済完了後の制御4 おまけ4.1 ローカルでWebho ...

laravel logo

LaravelでHTTP通信

1 はじめに2 インストール3 基本的な使い方3.1 GETでリクエストを投げる3.2 リクエストヘッダーを指定3.3 クエリパラメータを指定3.4 timeout時間を指定3.5 POSTでリクエス ...

laravel logo

LaravelのArtisanコマンドを自作する

1 はじめに2 コマンドの作成方法3 コマンドの実装3.1 文字列出力3.2 引数3.3 オプション3.4 入力を使用した対話型3.4.1 ask()メソッド3.4.2 secret()メソッド3.4 ...

rails

【Puma】アプリサーバのチューニング

1 はじめに2 チューニングで注意する項目3 子プロセスの数3.1 最低3つの子プロセスを割り当てる3.2 最大子プロセス数3.3 CPUコア数と子プロセス数3.4 なぜPumaの子プロセス数を増やす ...

フォロー

blog-page_side_responsive

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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