回答編集履歴

3

見直しキャンペーン中

2023/07/21 10:25

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -1,117 +1,58 @@
1
1
  かっこのネストと`_`が気になりますが、`Deconstruct`をいっぱい書くよりましな気が^^;
2
2
 
3
-
4
-
5
- ```C#
3
+ ```cs
6
-
7
4
  using System;
8
-
9
5
  using System.Linq;
10
6
 
11
-
12
-
13
7
  namespace Questions254722
14
-
15
8
  {
16
-
17
9
  class Program
18
-
19
10
  {
20
-
21
11
  static void Main()
22
-
23
12
  {
24
-
25
13
  {
26
-
27
14
  var (a, (b, _)) = "1 2".Split().Select(int.Parse).ToArray();
28
-
29
15
  Console.WriteLine($"a={a}, b={b}");
30
-
31
16
  }
32
-
33
17
  {
34
-
35
18
  var (a, (b, (c, _))) = "1 2 3".Split().Select(int.Parse).ToArray();
36
-
37
19
  Console.WriteLine($"a={a}, b={b}, c={c}");
38
-
39
20
  }
40
-
41
21
  {
42
-
43
22
  var (a, (b, (c, (d, _)))) = "1 2 3 4".Split().Select(int.Parse).ToArray();
44
-
45
23
  Console.WriteLine($"a={a}, b={b}, c={c}, d={d}");
46
-
47
24
  }
48
-
49
25
  {
50
-
51
26
  var (a, (b, (c, rest))) = "1 2 3 4 5 6 7 8 9".Split().Select(int.Parse).ToArray();
52
-
53
27
  Console.WriteLine($"a={a}, b={b}, c={c}, rest=[{string.Join(", ", rest.ToArray())}]");
54
-
55
28
  }
56
-
57
29
  }
58
-
59
30
  }
60
31
 
61
-
62
-
63
32
  // https://github.com/dotnet/csharplang/issues/874#issuecomment-327696774
64
-
65
33
  static class ArrayDeconstruction
66
-
67
34
  {
68
-
69
35
  public static void Deconstruct<T>(this T[] x, out T head, out Span<T> tail)
70
-
71
36
  {
72
-
73
37
  head = x[0];
74
-
75
38
  tail = new Span<T>(x).Slice(1);
76
-
77
39
  }
78
-
79
40
  public static void Deconstruct<T>(this Span<T> x, out T head, out Span<T> tail)
80
-
81
41
  {
82
-
83
42
  head = x[0];
84
-
85
43
  tail = x.Slice(1);
86
-
87
44
  }
88
-
89
45
  }
90
-
91
46
  }
92
-
93
47
  ```
94
-
95
48
  上記コードでは`Span<T>`を使用しています。
96
-
97
49
  .NET Core 2.1以降もしくは、.NET Frameworkの場合は`System.Memory`をNuGetでインストールしてください。
98
-
99
-
100
50
 
101
51
  ---
102
52
 
103
-
104
-
105
53
  GitHubを検索したところ、`Deconstruct`をいっぱい書いている方がいました。
106
-
107
54
  [WhetStone/DeconstructEnumerable.cs at master · bentheiii/WhetStone](https://github.com/bentheiii/WhetStone/blob/master/WhetStone/DeconstructEnumerable.cs)
108
-
109
55
  (ほかにもあるでしょうが最初に見つけたもの)
110
56
 
111
-
112
-
113
- この拡張メソッドで
57
+ この拡張メソッドで↓のように書けます(7個まで・数があっていないとエラー)
114
-
115
58
  `var (a, b, c, d, e, f, g) = "1 2 3 4 5 6 7".Split().Select(int.Parse);`
116
-
117
- のように書けます(7個まで・数があっていないとエラー)

2

Span<T>注記

2020/04/19 12:57

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -92,6 +92,10 @@
92
92
 
93
93
  ```
94
94
 
95
+ 上記コードでは`Span<T>`を使用しています。
96
+
97
+ .NET Core 2.1以降もしくは、.NET Frameworkの場合は`System.Memory`をNuGetでインストールしてください。
98
+
95
99
 
96
100
 
97
101
  ---

1

Deconstructいっぱい

2020/04/19 12:57

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -91,3 +91,23 @@
91
91
  }
92
92
 
93
93
  ```
94
+
95
+
96
+
97
+ ---
98
+
99
+
100
+
101
+ GitHubを検索したところ、`Deconstruct`をいっぱい書いている方がいました。
102
+
103
+ [WhetStone/DeconstructEnumerable.cs at master · bentheiii/WhetStone](https://github.com/bentheiii/WhetStone/blob/master/WhetStone/DeconstructEnumerable.cs)
104
+
105
+ (ほかにもあるでしょうが最初に見つけたもの)
106
+
107
+
108
+
109
+ この拡張メソッドで
110
+
111
+ `var (a, b, c, d, e, f, g) = "1 2 3 4 5 6 7".Split().Select(int.Parse);`
112
+
113
+ のように書けます(7個まで・数があっていないとエラー)