diff --git a/examples/basic/sliceop/README.md b/examples/basic/sliceop/README.md index e0b1cc83..8354a1bd 100644 --- a/examples/basic/sliceop/README.md +++ b/examples/basic/sliceop/README.md @@ -2,25 +2,26 @@ このディレクトリには以下のサンプルがあります。 -| file | example name | note | -| -------------------------------- | ------------------------------- | ---------------------------------------------------------------------------- | -| slice_basic01.go | sliceop_basic01 | スライスについてのサンプル | -| slice_basic02.go | sliceop_basic02 | スライスについてのサンプル | -| slice_basic03.go | sliceop_basic03 | スライスについてのサンプル | -| slice_basic04.go | sliceop_basic04 | スライスについてのサンプル | -| slice_basic05.go | sliceop_basic05 | スライスについてのサンプル | -| slice_reverse.go | sliceop_reverse | スライスのリバース処理についてのサンプルです。 | -| slice_append.go | sliceop_append | スライスの append 利用時についてのサンプルです. | -| slice_pointer.go | sliceop_pointer | スライスの ポインタ 利用時についてのサンプルです. | -| slice_copy.go | sliceop_copy | スライスの コピー についてのサンプルです. | -| slice_clear.go | sliceop_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. | -| slice_deepequale.go | sliceop_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. | -| slice_concat.go | sliceop_concat | 2つのスライスの結合に関するサンプルです. | -| slice_remove_all_elements.go | sliceop_remove_all_elements | スライスの全要素を削除するサンプルです. | -| slice_keep_allocated_memory.go | sliceop_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. | -| slice_nil_append.go | sliceop_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル | -| slice_convert_to_array_go117.go | sliceop_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです | -| slice_append_special_behavior.go | sliceop_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです | -| slice_iter_values.go | sliceop_go123_iter_values | Go 1.23で追加された slices.Values() のサンプルです | -| slice_iter_all.go | sliceop_go123_iter_all | Go 1.23で追加された slices.All() のサンプルです | +| file | example name | note | +| -------------------------------- | ------------------------------- | -------------------------------------------------------------------------- | +| slice_basic01.go | sliceop_basic01 | スライスについてのサンプル | +| slice_basic02.go | sliceop_basic02 | スライスについてのサンプル | +| slice_basic03.go | sliceop_basic03 | スライスについてのサンプル | +| slice_basic04.go | sliceop_basic04 | スライスについてのサンプル | +| slice_basic05.go | sliceop_basic05 | スライスについてのサンプル | +| slice_reverse.go | sliceop_reverse | スライスのリバース処理についてのサンプルです。 | +| slice_append.go | sliceop_append | スライスの append 利用時についてのサンプルです. | +| slice_pointer.go | sliceop_pointer | スライスの ポインタ 利用時についてのサンプルです. | +| slice_copy.go | sliceop_copy | スライスの コピー についてのサンプルです. | +| slice_clear.go | sliceop_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. | +| slice_deepequale.go | sliceop_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. | +| slice_concat.go | sliceop_concat | 2つのスライスの結合に関するサンプルです. | +| slice_remove_all_elements.go | sliceop_remove_all_elements | スライスの全要素を削除するサンプルです. | +| slice_keep_allocated_memory.go | sliceop_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. | +| slice_nil_append.go | sliceop_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル | +| slice_convert_to_array_go117.go | sliceop_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです | +| slice_append_special_behavior.go | sliceop_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです | +| slice_iter_values.go | sliceop_iter_values | Go 1.23で追加された slices.Values() のサンプルです | +| slice_iter_all.go | sliceop_iter_all | Go 1.23で追加された slices.All() のサンプルです | +| slice_iter_chunk.go | sliceop_iter_chunk | Go 1.23で追加された slices.Chunkのサンプルです。 | | slice_fullsliceexp_copy.go | sliceop_normal_fullslice_copy | 通常スライス、フルスライス式、copyビルドイン関数を利用した場合のサンプルです | diff --git a/examples/basic/sliceop/examples.go b/examples/basic/sliceop/examples.go index 8f52a1a1..4311844a 100644 --- a/examples/basic/sliceop/examples.go +++ b/examples/basic/sliceop/examples.go @@ -32,7 +32,8 @@ func (r *register) Regist(m mapping.ExampleMapping) { m["sliceop_declare_empty_slice"] = DeclareEmtpySlice m["sliceop_convert_to_array_go117"] = ConvertToArrayGo117 m["sliceop_append_special_behavior"] = AppendSpecialBehavior - m["sliceop_go123_iter_values"] = IterValues - m["sliceop_go123_iter_all"] = IterAll + m["sliceop_iter_values"] = IterValues + m["sliceop_iter_all"] = IterAll + m["sliceop_iter_chunk"] = Chunk m["sliceop_normal_fullslice_copy"] = NormalFullsliceCopy } diff --git a/examples/basic/sliceop/slice_iter_chunk.go b/examples/basic/sliceop/slice_iter_chunk.go new file mode 100644 index 00000000..d95ead4f --- /dev/null +++ b/examples/basic/sliceop/slice_iter_chunk.go @@ -0,0 +1,69 @@ +package sliceop + +import ( + "cmp" + "fmt" + "maps" + "slices" +) + +func Chunk() error { + // + // Go1.23でサポートされたiterパッケージのサンプルとして + // わざとマップからスライスへの変換をしている + // + var ( + months = map[string]string{ + "Janualy": "1", + "Febualy": "2", + "March": "3", + "April": "4", + "May": "5", + "June": "6", + "July": "7", + "August": "8", + "September": "9", + "October": "10", + "November": "11", + "December": "12", + } + monthNames = slices.Collect(maps.Keys(months)) + maxLenMonth = slices.MaxFunc(monthNames, func(x, y string) int { + return cmp.Compare(len(x), len(y)) + }) + ) + + // + // ソートして、3つずつ出力 + // + const ( + nChunks = 3 + ) + + slices.Sort(monthNames) + for chunk := range slices.Chunk(monthNames, nChunks) { + for v := range slices.Values(chunk) { + fmt.Printf("%-*s", len(maxLenMonth), v) + } + + fmt.Println("") + } + + return nil + + /* + $ task + task: [build] go build -o "/home/dev/dev/github/try-golang/try-golang" . + task: [run] ./try-golang -onetime + + ENTER EXAMPLE NAME: sliceop_iter_chunk + + [Name] "sliceop_iter_chunk" + April August December + Febualy Janualy July + June March May + November October September + + [Elapsed] 81.717µs + */ +}