teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

見直しキャンペーン中

2023/07/21 10:25

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -1,59 +1,58 @@
1
- かっこのネストと`_`が気になりますが、`Deconstruct`をいっぱい書くよりましな気が^^;
2
-
3
- ```C#
4
- using System;
5
- using System.Linq;
6
-
7
- namespace Questions254722
8
- {
9
- class Program
10
- {
11
- static void Main()
12
- {
13
- {
14
- var (a, (b, _)) = "1 2".Split().Select(int.Parse).ToArray();
15
- Console.WriteLine($"a={a}, b={b}");
16
- }
17
- {
18
- var (a, (b, (c, _))) = "1 2 3".Split().Select(int.Parse).ToArray();
19
- Console.WriteLine($"a={a}, b={b}, c={c}");
20
- }
21
- {
22
- var (a, (b, (c, (d, _)))) = "1 2 3 4".Split().Select(int.Parse).ToArray();
23
- Console.WriteLine($"a={a}, b={b}, c={c}, d={d}");
24
- }
25
- {
26
- var (a, (b, (c, rest))) = "1 2 3 4 5 6 7 8 9".Split().Select(int.Parse).ToArray();
27
- Console.WriteLine($"a={a}, b={b}, c={c}, rest=[{string.Join(", ", rest.ToArray())}]");
28
- }
29
- }
30
- }
31
-
32
- // https://github.com/dotnet/csharplang/issues/874#issuecomment-327696774
33
- static class ArrayDeconstruction
34
- {
35
- public static void Deconstruct<T>(this T[] x, out T head, out Span<T> tail)
36
- {
37
- head = x[0];
38
- tail = new Span<T>(x).Slice(1);
39
- }
40
- public static void Deconstruct<T>(this Span<T> x, out T head, out Span<T> tail)
41
- {
42
- head = x[0];
43
- tail = x.Slice(1);
44
- }
45
- }
46
- }
47
- ```
48
- 上記コードでは`Span<T>`を使用しています。
49
- .NET Core 2.1以降もしくは、.NET Frameworkの場合は`System.Memory`をNuGetでインストールしてください。
50
-
51
- ---
52
-
53
- GitHubを検索したところ、`Deconstruct`をいっぱい書いている方がいました。
54
- [WhetStone/DeconstructEnumerable.cs at master · bentheiii/WhetStone](https://github.com/bentheiii/WhetStone/blob/master/WhetStone/DeconstructEnumerable.cs)
55
- (ほかにもあるでしょうが最初に見つけたもの)
56
-
57
- この拡張メソッドで
58
- `var (a, b, c, d, e, f, g) = "1 2 3 4 5 6 7".Split().Select(int.Parse);`
59
- のように書けます(7個まで・数があっていないとエラー)
1
+ かっこのネストと`_`が気になりますが、`Deconstruct`をいっぱい書くよりましな気が^^;
2
+
3
+ ```cs
4
+ using System;
5
+ using System.Linq;
6
+
7
+ namespace Questions254722
8
+ {
9
+ class Program
10
+ {
11
+ static void Main()
12
+ {
13
+ {
14
+ var (a, (b, _)) = "1 2".Split().Select(int.Parse).ToArray();
15
+ Console.WriteLine($"a={a}, b={b}");
16
+ }
17
+ {
18
+ var (a, (b, (c, _))) = "1 2 3".Split().Select(int.Parse).ToArray();
19
+ Console.WriteLine($"a={a}, b={b}, c={c}");
20
+ }
21
+ {
22
+ var (a, (b, (c, (d, _)))) = "1 2 3 4".Split().Select(int.Parse).ToArray();
23
+ Console.WriteLine($"a={a}, b={b}, c={c}, d={d}");
24
+ }
25
+ {
26
+ var (a, (b, (c, rest))) = "1 2 3 4 5 6 7 8 9".Split().Select(int.Parse).ToArray();
27
+ Console.WriteLine($"a={a}, b={b}, c={c}, rest=[{string.Join(", ", rest.ToArray())}]");
28
+ }
29
+ }
30
+ }
31
+
32
+ // https://github.com/dotnet/csharplang/issues/874#issuecomment-327696774
33
+ static class ArrayDeconstruction
34
+ {
35
+ public static void Deconstruct<T>(this T[] x, out T head, out Span<T> tail)
36
+ {
37
+ head = x[0];
38
+ tail = new Span<T>(x).Slice(1);
39
+ }
40
+ public static void Deconstruct<T>(this Span<T> x, out T head, out Span<T> tail)
41
+ {
42
+ head = x[0];
43
+ tail = x.Slice(1);
44
+ }
45
+ }
46
+ }
47
+ ```
48
+ 上記コードでは`Span<T>`を使用しています。
49
+ .NET Core 2.1以降もしくは、.NET Frameworkの場合は`System.Memory`をNuGetでインストールしてください。
50
+
51
+ ---
52
+
53
+ GitHubを検索したところ、`Deconstruct`をいっぱい書いている方がいました。
54
+ [WhetStone/DeconstructEnumerable.cs at master · bentheiii/WhetStone](https://github.com/bentheiii/WhetStone/blob/master/WhetStone/DeconstructEnumerable.cs)
55
+ (ほかにもあるでしょうが最初に見つけたもの)
56
+
57
+ この拡張メソッドで↓のように書けます(7個まで・数があっていないとエラー)
58
+ `var (a, b, c, d, e, f, g) = "1 2 3 4 5 6 7".Split().Select(int.Parse);`

2

Span<T>注記

2020/04/19 12:57

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -45,6 +45,8 @@
45
45
  }
46
46
  }
47
47
  ```
48
+ 上記コードでは`Span<T>`を使用しています。
49
+ .NET Core 2.1以降もしくは、.NET Frameworkの場合は`System.Memory`をNuGetでインストールしてください。
48
50
 
49
51
  ---
50
52
 

1

Deconstructいっぱい

2020/04/19 12:57

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -44,4 +44,14 @@
44
44
  }
45
45
  }
46
46
  }
47
- ```
47
+ ```
48
+
49
+ ---
50
+
51
+ GitHubを検索したところ、`Deconstruct`をいっぱい書いている方がいました。
52
+ [WhetStone/DeconstructEnumerable.cs at master · bentheiii/WhetStone](https://github.com/bentheiii/WhetStone/blob/master/WhetStone/DeconstructEnumerable.cs)
53
+ (ほかにもあるでしょうが最初に見つけたもの)
54
+
55
+ この拡張メソッドで
56
+ `var (a, b, c, d, e, f, g) = "1 2 3 4 5 6 7".Split().Select(int.Parse);`
57
+ のように書けます(7個まで・数があっていないとエラー)