質問編集履歴
4
追記5
title
CHANGED
File without changes
|
body
CHANGED
@@ -315,6 +315,7 @@
|
|
315
315
|
```
|
316
316
|
|
317
317
|
あわせてインターフェース、変換クラスのベースを作成します。
|
318
|
+
(インターフェースにふさわしくないメソッドがあり修正いたしました。)
|
318
319
|
|
319
320
|
```lang-<ここに言語を入力>
|
320
321
|
''' <summary>
|
3
追記3
title
CHANGED
File without changes
|
body
CHANGED
@@ -293,8 +293,8 @@
|
|
293
293
|
''' 連続する値は返さない
|
294
294
|
''' </summary>
|
295
295
|
''' <param name="i"></param>
|
296
|
-
''' <returns></returns>
|
296
|
+
''' <returns>T 返却対象 F 返却対象でない</returns>
|
297
|
-
''' <remarks></remarks>
|
297
|
+
''' <remarks>引数はリストの各インデックスである</remarks>
|
298
298
|
Protected Overrides Function IsGetEnumrable(ByVal i As Integer) As Boolean
|
299
299
|
|
300
300
|
If i <> Me.list.Count - 1 Then
|
@@ -390,8 +390,8 @@
|
|
390
390
|
''' 返却対象の値であるか確認
|
391
391
|
''' </summary>
|
392
392
|
''' <param name="i"></param>
|
393
|
-
''' <returns>引数はリストの各インデックスである</returns>
|
394
|
-
''' <
|
393
|
+
''' <returns>T 返却対象 F 返却対象でない</returns>
|
394
|
+
''' <remarks>引数はリストの各インデックスである</</remarks>
|
395
395
|
Protected MustOverride Function IsGetEnumrable(ByVal i As Integer) As Boolean
|
396
396
|
|
397
397
|
|
2
追記2
title
CHANGED
File without changes
|
body
CHANGED
@@ -272,4 +272,156 @@
|
|
272
272
|
|
273
273
|
End Class
|
274
274
|
|
275
|
+
```
|
276
|
+
|
277
|
+
追記2
|
278
|
+
変換クラスである「NotConsecutive」において
|
279
|
+
連続を省くという処理が分離されておらず
|
280
|
+
良くないコードと感じましたので修正いたします。
|
281
|
+
|
282
|
+
```lang-<ここに言語を入力>
|
283
|
+
''' <summary>
|
284
|
+
''' 変換クラス
|
285
|
+
''' </summary>
|
286
|
+
''' <remarks></remarks>
|
287
|
+
Class NotConsecutive(Of T)
|
288
|
+
Inherits ConvertEnumrable(Of T)
|
289
|
+
|
290
|
+
#Region "公開メソッド"
|
291
|
+
|
292
|
+
''' <summary>
|
293
|
+
''' 連続する値は返さない
|
294
|
+
''' </summary>
|
295
|
+
''' <param name="i"></param>
|
296
|
+
''' <returns></returns>
|
297
|
+
''' <remarks></remarks>
|
298
|
+
Protected Overrides Function IsGetEnumrable(ByVal i As Integer) As Boolean
|
299
|
+
|
300
|
+
If i <> Me.list.Count - 1 Then
|
301
|
+
'最後のインデックス以外
|
302
|
+
While GetItem(i) = GetItem(i + 1)
|
303
|
+
'連続する値は返さない
|
304
|
+
Return False
|
305
|
+
End While
|
306
|
+
End If
|
307
|
+
|
308
|
+
Return True
|
309
|
+
|
310
|
+
End Function
|
311
|
+
|
312
|
+
#End Region
|
313
|
+
|
314
|
+
End Class
|
315
|
+
```
|
316
|
+
|
317
|
+
あわせてインターフェース、変換クラスのベースを作成します。
|
318
|
+
|
319
|
+
```lang-<ここに言語を入力>
|
320
|
+
''' <summary>
|
321
|
+
''' 変換インターフェイス
|
322
|
+
''' </summary>
|
323
|
+
''' <remarks></remarks>
|
324
|
+
Public Interface IConvertEnumrable(Of T)
|
325
|
+
|
326
|
+
'リストを受け取る
|
327
|
+
Sub SetEnumerable(ByVal list As IEnumerable(Of T), ByVal itemName As String)
|
328
|
+
|
329
|
+
'リストを返す
|
330
|
+
Function GetEnumerable() As IEnumerable(Of T)
|
331
|
+
|
332
|
+
End Interface
|
333
|
+
|
334
|
+
|
335
|
+
''' <summary>
|
336
|
+
''' 変換クラス
|
337
|
+
''' </summary>
|
338
|
+
''' <typeparam name="T"></typeparam>
|
339
|
+
''' <remarks></remarks>
|
340
|
+
Public MustInherit Class ConvertEnumrable(Of T)
|
341
|
+
Implements IConvertEnumrable(Of T)
|
342
|
+
|
343
|
+
#Region "変数"
|
344
|
+
|
345
|
+
'リスト
|
346
|
+
Protected Property list As List(Of T)
|
347
|
+
'対象アイテム
|
348
|
+
Protected Property itemName As String
|
349
|
+
|
350
|
+
#End Region
|
351
|
+
|
352
|
+
#Region "公開メソッド"
|
353
|
+
|
354
|
+
''' <summary>
|
355
|
+
''' リストを受け取る
|
356
|
+
''' </summary>
|
357
|
+
''' <param name="list"></param>
|
358
|
+
''' <param name="itemName"></param>
|
359
|
+
''' <remarks></remarks>
|
360
|
+
Public Sub SetEnumerable(list As IEnumerable(Of T), ByVal itemName As String) Implements IConvertEnumrable(Of T).SetEnumerable
|
361
|
+
|
362
|
+
Me.list = list
|
363
|
+
Me.itemName = itemName
|
364
|
+
|
365
|
+
End Sub
|
366
|
+
|
367
|
+
''' <summary>
|
368
|
+
''' リストを返す
|
369
|
+
''' </summary>
|
370
|
+
''' <returns></returns>
|
371
|
+
''' <remarks></remarks>
|
372
|
+
Public Iterator Function GetEnumerable() As IEnumerable(Of T) Implements IConvertEnumrable(Of T).GetEnumerable
|
373
|
+
|
374
|
+
For i = 0 To Me.list.Count - 1
|
375
|
+
|
376
|
+
'返却対象でない場合スキップ
|
377
|
+
If IsGetEnumrable(i) = False Then Continue For
|
378
|
+
|
379
|
+
'値を返す
|
380
|
+
Yield Me.list(i)
|
381
|
+
Next
|
382
|
+
|
383
|
+
End Function
|
384
|
+
|
385
|
+
#End Region
|
386
|
+
|
387
|
+
#Region "内部メソッド"
|
388
|
+
|
389
|
+
''' <summary>
|
390
|
+
''' 返却対象の値であるか確認
|
391
|
+
''' </summary>
|
392
|
+
''' <param name="i"></param>
|
393
|
+
''' <returns>引数はリストの各インデックスである</returns>
|
394
|
+
''' <remarks>T 返却対象 F 返却対象でない</remarks>
|
395
|
+
Protected MustOverride Function IsGetEnumrable(ByVal i As Integer) As Boolean
|
396
|
+
|
397
|
+
|
398
|
+
''' <summary>
|
399
|
+
''' アイテム取得
|
400
|
+
''' </summary>
|
401
|
+
''' <param name="i"></param>
|
402
|
+
''' <remarks></remarks>
|
403
|
+
Protected Function GetItem(ByVal i As Integer) As String
|
404
|
+
Dim item As Object = Me.list(i) 'インデックスの位置のアイテム
|
405
|
+
Dim ret As String = Nothing '戻り値
|
406
|
+
|
407
|
+
If Me.itemName Is Nothing Then
|
408
|
+
'アイテムの指定がなかった場合
|
409
|
+
ret = item.ToString()
|
410
|
+
Else
|
411
|
+
'アイテムの指定があった場合
|
412
|
+
Select Case GetType(T)
|
413
|
+
'- DataRowの場合
|
414
|
+
Case GetType(DataRow)
|
415
|
+
ret = item.item(itemName)
|
416
|
+
|
417
|
+
End Select
|
418
|
+
End If
|
419
|
+
|
420
|
+
'比較対象を返す
|
421
|
+
Return ret
|
422
|
+
End Function
|
423
|
+
|
424
|
+
#End Region
|
425
|
+
|
426
|
+
End Class
|
275
427
|
```
|
1
編集1
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,7 +10,11 @@
|
|
10
10
|
|
11
11
|
どうかよろしくお願いいたします。
|
12
12
|
|
13
|
+
追記1
|
14
|
+
1、2言のコメントでも頂けましたら幸いです。
|
15
|
+
今後のプログラミングでいかしていけるよう心に留めます。
|
13
16
|
|
17
|
+
|
14
18
|
```lang-<ここに言語を入力>
|
15
19
|
概要
|
16
20
|
リスト内要素 2回以上連続する場合1回とする
|