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


関連記事

Go言語

Go 1.16でのgo getとgo installの変更点

1 はじめに2 go getとgo installの役割2.1 go getの役割2.2 go installの役割3 この変更で何が改善されたのか3.1 go:generateと併用する4 その他の ...

RubyのHanamiチュートリアルをやってみた

1 はじめに2 紹介2.1 Hanamiとは?2.2 Hanamiを選ぶ理由2.2.1 軽量2.2.2 アーキテクチャとして2.2.3 スレッドセーフ3 チュートリアルのための準備4 実践4.1 はじ ...

rails

RailsでSidekiqを使ってみた

1 はじめに1.1 実行環境2 前準備2.1 Redisのインストール3 Railsの準備3.1 プロジェクト作成3.2 新規登録時にAPIを叩く4 Sidekiqの準備4.1 Workerを作る5 ...

Go言語

FSMを使った状態管理をGoで実装する

1 はじめに2 FSMとは3 基本的な実装3.1 実装する状態管理の概要3.2 状態管理を実装する4 structを定義した応用的な実装5 FSMの可視化6 さいごに7 おすすめ書籍 はじめに 一般的 ...

Rubyを使ってDialogflowのお勉強

1 はじめに1.1 環境2 とりあえずAPIで叩いてみる2.1 テスト用のIntentを作成2.2 Gemの設定3 Eventについて3.1 WELCOMEイベント3.2 パラメータ付きで叩く3.3 ...

フォロー

blog-page_side_responsive

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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