Skip to content

Commit ee131d7

Browse files
authored
Merge pull request #942 from devlights/add-slices-chunk-example
Add sliceop/slice_iter_chunk.go
2 parents fb532cf + 84c016e commit ee131d7

File tree

3 files changed

+94
-23
lines changed

3 files changed

+94
-23
lines changed

examples/basic/sliceop/README.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,26 @@
22

33
このディレクトリには以下のサンプルがあります。
44

5-
| file | example name | note |
6-
| -------------------------------- | ------------------------------- | ---------------------------------------------------------------------------- |
7-
| slice_basic01.go | sliceop_basic01 | スライスについてのサンプル |
8-
| slice_basic02.go | sliceop_basic02 | スライスについてのサンプル |
9-
| slice_basic03.go | sliceop_basic03 | スライスについてのサンプル |
10-
| slice_basic04.go | sliceop_basic04 | スライスについてのサンプル |
11-
| slice_basic05.go | sliceop_basic05 | スライスについてのサンプル |
12-
| slice_reverse.go | sliceop_reverse | スライスのリバース処理についてのサンプルです。 |
13-
| slice_append.go | sliceop_append | スライスの append 利用時についてのサンプルです. |
14-
| slice_pointer.go | sliceop_pointer | スライスの ポインタ 利用時についてのサンプルです. |
15-
| slice_copy.go | sliceop_copy | スライスの コピー についてのサンプルです. |
16-
| slice_clear.go | sliceop_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. |
17-
| slice_deepequale.go | sliceop_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. |
18-
| slice_concat.go | sliceop_concat | 2つのスライスの結合に関するサンプルです. |
19-
| slice_remove_all_elements.go | sliceop_remove_all_elements | スライスの全要素を削除するサンプルです. |
20-
| slice_keep_allocated_memory.go | sliceop_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. |
21-
| slice_nil_append.go | sliceop_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル |
22-
| slice_convert_to_array_go117.go | sliceop_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです |
23-
| slice_append_special_behavior.go | sliceop_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです |
24-
| slice_iter_values.go | sliceop_go123_iter_values | Go 1.23で追加された slices.Values() のサンプルです |
25-
| slice_iter_all.go | sliceop_go123_iter_all | Go 1.23で追加された slices.All() のサンプルです |
5+
| file | example name | note |
6+
| -------------------------------- | ------------------------------- | -------------------------------------------------------------------------- |
7+
| slice_basic01.go | sliceop_basic01 | スライスについてのサンプル |
8+
| slice_basic02.go | sliceop_basic02 | スライスについてのサンプル |
9+
| slice_basic03.go | sliceop_basic03 | スライスについてのサンプル |
10+
| slice_basic04.go | sliceop_basic04 | スライスについてのサンプル |
11+
| slice_basic05.go | sliceop_basic05 | スライスについてのサンプル |
12+
| slice_reverse.go | sliceop_reverse | スライスのリバース処理についてのサンプルです。 |
13+
| slice_append.go | sliceop_append | スライスの append 利用時についてのサンプルです. |
14+
| slice_pointer.go | sliceop_pointer | スライスの ポインタ 利用時についてのサンプルです. |
15+
| slice_copy.go | sliceop_copy | スライスの コピー についてのサンプルです. |
16+
| slice_clear.go | sliceop_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. |
17+
| slice_deepequale.go | sliceop_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. |
18+
| slice_concat.go | sliceop_concat | 2つのスライスの結合に関するサンプルです. |
19+
| slice_remove_all_elements.go | sliceop_remove_all_elements | スライスの全要素を削除するサンプルです. |
20+
| slice_keep_allocated_memory.go | sliceop_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. |
21+
| slice_nil_append.go | sliceop_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル |
22+
| slice_convert_to_array_go117.go | sliceop_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです |
23+
| slice_append_special_behavior.go | sliceop_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです |
24+
| slice_iter_values.go | sliceop_iter_values | Go 1.23で追加された slices.Values() のサンプルです |
25+
| slice_iter_all.go | sliceop_iter_all | Go 1.23で追加された slices.All() のサンプルです |
26+
| slice_iter_chunk.go | sliceop_iter_chunk | Go 1.23で追加された slices.Chunkのサンプルです。 |
2627
| slice_fullsliceexp_copy.go | sliceop_normal_fullslice_copy | 通常スライス、フルスライス式、copyビルドイン関数を利用した場合のサンプルです |

examples/basic/sliceop/examples.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ func (r *register) Regist(m mapping.ExampleMapping) {
3232
m["sliceop_declare_empty_slice"] = DeclareEmtpySlice
3333
m["sliceop_convert_to_array_go117"] = ConvertToArrayGo117
3434
m["sliceop_append_special_behavior"] = AppendSpecialBehavior
35-
m["sliceop_go123_iter_values"] = IterValues
36-
m["sliceop_go123_iter_all"] = IterAll
35+
m["sliceop_iter_values"] = IterValues
36+
m["sliceop_iter_all"] = IterAll
37+
m["sliceop_iter_chunk"] = Chunk
3738
m["sliceop_normal_fullslice_copy"] = NormalFullsliceCopy
3839
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package sliceop
2+
3+
import (
4+
"cmp"
5+
"fmt"
6+
"maps"
7+
"slices"
8+
)
9+
10+
func Chunk() error {
11+
//
12+
// Go1.23でサポートされたiterパッケージのサンプルとして
13+
// わざとマップからスライスへの変換をしている
14+
//
15+
var (
16+
months = map[string]string{
17+
"Janualy": "1",
18+
"Febualy": "2",
19+
"March": "3",
20+
"April": "4",
21+
"May": "5",
22+
"June": "6",
23+
"July": "7",
24+
"August": "8",
25+
"September": "9",
26+
"October": "10",
27+
"November": "11",
28+
"December": "12",
29+
}
30+
monthNames = slices.Collect(maps.Keys(months))
31+
maxLenMonth = slices.MaxFunc(monthNames, func(x, y string) int {
32+
return cmp.Compare(len(x), len(y))
33+
})
34+
)
35+
36+
//
37+
// ソートして、3つずつ出力
38+
//
39+
const (
40+
nChunks = 3
41+
)
42+
43+
slices.Sort(monthNames)
44+
for chunk := range slices.Chunk(monthNames, nChunks) {
45+
for v := range slices.Values(chunk) {
46+
fmt.Printf("%-*s", len(maxLenMonth), v)
47+
}
48+
49+
fmt.Println("")
50+
}
51+
52+
return nil
53+
54+
/*
55+
$ task
56+
task: [build] go build -o "/home/dev/dev/github/try-golang/try-golang" .
57+
task: [run] ./try-golang -onetime
58+
59+
ENTER EXAMPLE NAME: sliceop_iter_chunk
60+
61+
[Name] "sliceop_iter_chunk"
62+
April August December
63+
Febualy Janualy July
64+
June March May
65+
November October September
66+
67+
[Elapsed] 81.717µs
68+
*/
69+
}

0 commit comments

Comments
 (0)