お世話になります。
先日以下の用件を満たすメソッドを作成しました。
datarowのリストを受け取り連続する値を削除し戻すものです。
lang
1Public Function toNotContList(ByVal rows As List(Of DataRow)) As List(Of DataRow) 2 3 '2回以上連続しているrowは1つとみなす 4 Dim lcnt As Integer = 0 '連続数 5 Dim lrow As DataRow = Nothing '連続行 6 Dim ansRow As New List(Of DataRow) 7 For i As Integer = 0 To rows.Count - 1 8 9 '不正インデックスにアクセスする前に、ansRow追加、ループを抜ける() 10 If i = rows.Count - 1 Then GoTo AddRow 11 12 If rows(i).Item("F_Tmp") = rows(i + 1).Item("F_Tmp") Then 13 '連続した場合 連続情報保存 14 lcnt += 1 15 lrow = rows(i) 16 Else 17 18AddRow: 19 '連続しなくなった場合 ansRowに追加 20 If lcnt = 0 Then 21 '連続情報 連続無し 22 ansRow.Add(rows(i)) 23 Else 24 '連続情報 連続あり 25 ansRow.Add(lrow) 26 lcnt = 0 27 End If 28 29 '最後の比較が終了した場合終了 30 If i = rows.Count - 1 Then Exit For 31 32 End If 33 Next 34 Return ansRow 35 End Function
他に記述の仕方はあるでしょうか?
またはこのメソッドでできるよ!
等ありましたらご教授ください。
追記1:
ループの仕方が汚く思いましたので、
連続チェックの回数分でForをまわすよう修正しました。
lang
1Public Function toNotContList(ByVal rows As List(Of DataRow)) As List(Of DataRow) 2 3 '2回以上連続しているrowは1つとみなす 4 Dim lcnt As Integer = 0 '連続数 5 Dim lrow As DataRow = Nothing '連続行 6 Dim ansRow As New List(Of DataRow) '結果 7 8 For i As Integer = 0 To rows.Count - 2 9 '連続チェック回数分ループ 10 11 If rows(i).Item("F_Tmp") = rows(i + 1).Item("F_Tmp") Then 12 '連続した場合 連続情報保存 13 lcnt += 1 14 lrow = rows(i) 15 16 '最後の連続チャックの場合、ansRow追加 17 If i = rows.Count - 2 Then GoTo AddRow 18 19 Else 20Addrow: 21 '連続しなくなった場合 ansRowに追加 22 If lcnt = 0 Then 23 '連続情報 連続無し 24 ansRow.Add(rows(i)) 25 Else 26 '連続情報 連続あり 27 ansRow.Add(lrow) 28 lcnt = 0 29 End If 30 31 End If 32 Next 33 Return ansRow 34 End Function
改善点としては、
1、引数でカラム名を受け取るようにする
2、gotoを使わないようにする
3、拡張メソッドとする
でしょうか?
追記2
コード挙げておいてなんですが、
思惑通り動いてないようです(^^;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/29 09:42