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

質問編集履歴

4

追記5

2015/03/28 20:16

投稿

ranran
ranran

スコア85

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

2015/03/28 20:16

投稿

ranran
ranran

スコア85

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
- ''' <remarks>T 返却対象 F 返却対象でない</remarks>
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

2015/03/28 20:09

投稿

ranran
ranran

スコア85

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

2015/03/28 20:05

投稿

ranran
ranran

スコア85

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回とする