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

回答編集履歴

3

追記

2020/04/19 06:45

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -61,4 +61,85 @@
61
61
 
62
62
  また ToVariable は変数の宣言を任意の位置に持ってくる拡張メソッドです。代入する変数を最後に記述することで、脳の負担が軽くなります。
63
63
 
64
- C# 8.0 では式の重要性が増したので、どちらも非常に便利で、多用しています。
64
+ C# 8.0 では式の重要性が増したので、どちらも非常に便利で、多用しています。
65
+
66
+
67
+ ### 追記
68
+
69
+ 競プロなら汎用性無視で、次のようなコードを書いてもいいと思います。
70
+
71
+ ```C#
72
+ using System;
73
+ using System.Collections.Generic;
74
+ using System.Linq;
75
+ using static System.Console;
76
+
77
+ namespace ConsoleApp1
78
+ {
79
+ class Program
80
+ {
81
+ static void Main()
82
+ {
83
+ (int x, int y) = ReadLine()
84
+ .SplitToInt()
85
+ .ToTuple2();
86
+ WriteLine(x);
87
+ }
88
+ }
89
+
90
+ static class Util
91
+ {
92
+ public static IEnumerable<int> SplitToInt(this string source)
93
+ {
94
+ return source.Split().Select(int.Parse);
95
+ }
96
+
97
+ public static (T, T) ToTuple2<T>(this IEnumerable<T> source)
98
+ {
99
+ return source.ToList().Chain(a => (a[0], a[1]));
100
+ }
101
+
102
+ public static (T, T, T) ToTuple3<T>(this IEnumerable<T> source)
103
+ {
104
+ return source.ToList().Chain(a => (a[0], a[1], a[2]));
105
+ }
106
+
107
+ public static (T, T, T, T) ToTuple4<T>(this IEnumerable<T> source)
108
+ {
109
+ return source.ToList().Chain(a => (a[0], a[1], a[2], a[3]));
110
+ }
111
+
112
+ public static (T, T, T, T, T) ToTuple5<T>(this IEnumerable<T> source)
113
+ {
114
+ return source.ToList().Chain(a => (a[0], a[1], a[2], a[3], a[4]));
115
+ }
116
+
117
+ public static T Chain<T>(
118
+ this T source,
119
+ Action<T> action)
120
+ {
121
+ if (action == null)
122
+ throw new ArgumentNullException(nameof(action));
123
+
124
+ action(source);
125
+ return source;
126
+ }
127
+
128
+ public static TResult Chain<TSource, TResult>(
129
+ this TSource source,
130
+ Func<TSource, TResult> func)
131
+ {
132
+ if (func == null)
133
+ throw new ArgumentNullException(nameof(func));
134
+
135
+ return func(source);
136
+ }
137
+
138
+ public static T ToVariable<T>(this T source, out T variable)
139
+ {
140
+ variable = source;
141
+ return source;
142
+ }
143
+ }
144
+ }
145
+ ```

2

修正

2020/04/19 06:45

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  }
58
58
  ```
59
59
 
60
- Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、System.Interactive の Do や ForEach 的な使い方も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
60
+ Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、IEnumerable<T> 以外の汎用的な型に対する System.Interactive の Do や ForEach 的な使い方も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
61
61
 
62
62
  また ToVariable は変数の宣言を任意の位置に持ってくる拡張メソッドです。代入する変数を最後に記述することで、脳の負担が軽くなります。
63
63
 

1

修正

2020/04/19 06:15

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  }
58
58
  ```
59
59
 
60
- Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、System.Interactive の Do や ForEach も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
60
+ Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、System.Interactive の Do や ForEach 的な使い方も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
61
61
 
62
62
  また ToVariable は変数の宣言を任意の位置に持ってくる拡張メソッドです。代入する変数を最後に記述することで、脳の負担が軽くなります。
63
63