
VB.Net/C# .NET Framework2.0で開発しております。
下記コード例のように、イテレータループ内(For Each文)でのコレクションの変更(要素の削除)ができないため、苦肉の策として下のように削除する予定のものを格納するバッファ(removeList)に一度登録し、その後もう一度ループをまわして実際に削除する、というコードを書いておりますが、分量も多くなり、一時変数なども出てくるため、あまりよいコードとは言えないと思います。
コレクションから特定の条件を満たした要素を削除するための、もうすこしスマートな書き方はないものでしょうか?
宜しくお願いいたします。
Dim removeList as new List(Of TestClass)
For Each e as TestClass in targetList
If e.IsDummy Then
'直接targetList.Remove(o) とはできない
removeList.Add(o)
End If
End For
For Each e as TestClass in removeList
targetList.Remove(e)
End For
No.2ベストアンサー
- 回答日時:
List(Of T)のRemoveAllで削除したほうがいいかもしれませんよ
' 削除条件を決定する関数を準備
Private Function myCheck( obj as TestClass) as Boolean
return obj.IsDummy
End Function
呼び出し方
targetList.RemoveAll( AddressOf myCheck )
といった具合にしてやれば IsDummyがTrueになっているアイテムをすべて削除してくれますよ
あなた様は本当に神様か何かだと思います。本当にありがとうございました。本当に感謝しています。重ね重ね本当にありがとうございました。
No.1
- 回答日時:
意図されている事かどうか分かりませんが。
。これでどうですか
For i As Integer = 0 To targetList.Count - 1
Dim cls As TestClass = targetList(i)
If cls Is Nothing Then
Continue For
End If
If cls.IsDummy Then
targetList.Remove(cls)
End If
Next
この回答への補足
ご回答ありがとうございます。
確かにこの方法でもできそうですね。一点、普段コレクションの走査でインデックスループをあまり用いないので、targetListからリアルタイムにRemoveしてしまった後の歯抜けリストの走査は正常に動作するのか不安があります(インデックスがずれたり等)。後で検証してみます。
その他、なるべくならFor Eachループを用いて簡潔な記法で書きたいと考えておりますので、他の方法もありましたら宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Youtubeの書き起こしの機能につ...
-
Yahooフリマってどれくらい時間...
-
告白してフラれた相手の連絡先...
-
VBA:Openステートメントで開い...
-
mp3の埋め込み画像の削除ができ...
-
バッチファイルを使用したsql@p...
-
同じ質問
-
インスタグラムのギャラリーの...
-
nProtectの削除について(PSO2削除)
-
離婚後の連絡
-
エクセルで下の空白行を削除したい
-
2度と連絡とらないとお互い納得...
-
エクセルで住所の混在する「丁...
-
これのどこが削除対象になるの...
-
喧嘩をしてLINE削除され、 また...
-
回答1件に成っているが、回答...
-
時間を設定してデータを削除したい
-
教えてGooは質問の取り消しはで...
-
削除
-
動画のexif情報のようなものを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
指定した文字があった場合、そ...
-
告白してフラれた相手の連絡先...
-
VBA:Openステートメントで開い...
-
mp3の埋め込み画像の削除ができ...
-
バッチファイルを使用したsql@p...
-
喧嘩をしてLINE削除され、 また...
-
今日の日付が過ぎたらその行を...
-
エクセルで住所の混在する「丁...
-
Windows11に残されたWindows10...
-
もう関わりたくない人がいたらL...
-
【エクセル】セル内の右側のみ...
-
アクセスにおいて間違って削除...
-
VBA IF文でORを使ったとき後ろ...
-
エクセルVBAで行削除時にエラー...
-
ポケモンGOについて質問したい...
-
エクセルで下の空白行を削除したい
-
(Access)複数条件の重複デー...
-
投稿した書き込みの削除の方法...
-
メーリングリストから特定の人...
おすすめ情報