Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 22 additions & 21 deletions examples/basic/sliceop/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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ビルドイン関数を利用した場合のサンプルです |
5 changes: 3 additions & 2 deletions examples/basic/sliceop/examples.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
69 changes: 69 additions & 0 deletions examples/basic/sliceop/slice_iter_chunk.go
Original file line number Diff line number Diff line change
@@ -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
*/
}
Loading