回答編集履歴

3

追記

2020/04/19 06:45

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -125,3 +125,165 @@
125
125
 
126
126
 
127
127
  C# 8.0 では式の重要性が増したので、どちらも非常に便利で、多用しています。
128
+
129
+
130
+
131
+
132
+
133
+ ### 追記
134
+
135
+
136
+
137
+ 競プロなら汎用性無視で、次のようなコードを書いてもいいと思います。
138
+
139
+
140
+
141
+ ```C#
142
+
143
+ using System;
144
+
145
+ using System.Collections.Generic;
146
+
147
+ using System.Linq;
148
+
149
+ using static System.Console;
150
+
151
+
152
+
153
+ namespace ConsoleApp1
154
+
155
+ {
156
+
157
+ class Program
158
+
159
+ {
160
+
161
+ static void Main()
162
+
163
+ {
164
+
165
+ (int x, int y) = ReadLine()
166
+
167
+ .SplitToInt()
168
+
169
+ .ToTuple2();
170
+
171
+ WriteLine(x);
172
+
173
+ }
174
+
175
+ }
176
+
177
+
178
+
179
+ static class Util
180
+
181
+ {
182
+
183
+ public static IEnumerable<int> SplitToInt(this string source)
184
+
185
+ {
186
+
187
+ return source.Split().Select(int.Parse);
188
+
189
+ }
190
+
191
+
192
+
193
+ public static (T, T) ToTuple2<T>(this IEnumerable<T> source)
194
+
195
+ {
196
+
197
+ return source.ToList().Chain(a => (a[0], a[1]));
198
+
199
+ }
200
+
201
+
202
+
203
+ public static (T, T, T) ToTuple3<T>(this IEnumerable<T> source)
204
+
205
+ {
206
+
207
+ return source.ToList().Chain(a => (a[0], a[1], a[2]));
208
+
209
+ }
210
+
211
+
212
+
213
+ public static (T, T, T, T) ToTuple4<T>(this IEnumerable<T> source)
214
+
215
+ {
216
+
217
+ return source.ToList().Chain(a => (a[0], a[1], a[2], a[3]));
218
+
219
+ }
220
+
221
+
222
+
223
+ public static (T, T, T, T, T) ToTuple5<T>(this IEnumerable<T> source)
224
+
225
+ {
226
+
227
+ return source.ToList().Chain(a => (a[0], a[1], a[2], a[3], a[4]));
228
+
229
+ }
230
+
231
+
232
+
233
+ public static T Chain<T>(
234
+
235
+ this T source,
236
+
237
+ Action<T> action)
238
+
239
+ {
240
+
241
+ if (action == null)
242
+
243
+ throw new ArgumentNullException(nameof(action));
244
+
245
+
246
+
247
+ action(source);
248
+
249
+ return source;
250
+
251
+ }
252
+
253
+
254
+
255
+ public static TResult Chain<TSource, TResult>(
256
+
257
+ this TSource source,
258
+
259
+ Func<TSource, TResult> func)
260
+
261
+ {
262
+
263
+ if (func == null)
264
+
265
+ throw new ArgumentNullException(nameof(func));
266
+
267
+
268
+
269
+ return func(source);
270
+
271
+ }
272
+
273
+
274
+
275
+ public static T ToVariable<T>(this T source, out T variable)
276
+
277
+ {
278
+
279
+ variable = source;
280
+
281
+ return source;
282
+
283
+ }
284
+
285
+ }
286
+
287
+ }
288
+
289
+ ```

2

修正

2020/04/19 06:45

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -116,7 +116,7 @@
116
116
 
117
117
 
118
118
 
119
- Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、System.Interactive の Do や ForEach 的な使い方も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
119
+ Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、IEnumerable<T> 以外の汎用的な型に対する System.Interactive の Do や ForEach 的な使い方も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
120
120
 
121
121
 
122
122
 

1

修正

2020/04/19 06:15

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -116,7 +116,7 @@
116
116
 
117
117
 
118
118
 
119
- Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、System.Interactive の Do や ForEach も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
119
+ Chain は IEnumerable<T> 以外に使える Select と思ってください。実際には文も受け付けるので、System.Interactive の Do や ForEach 的な使い方も兼ねています。どのような機能かはコードを見てもらえばわかると思います。
120
120
 
121
121
 
122
122