5

リスト(「listInts」という名前)に大量のintができてしまいます。

それは誰も驚かないはずです。

私の問題は、そこに負の数を入れたくないということですが、具体的には-1、-2、および-3の3つを持つ可能性があります。

次の方法で不器用に削除できます。

if (listInts.Contains(-1) {
    int i = listInts.IndexOf(-1);
    listInts.Remove(i);
    // etc.
}

...しかし、これはケナガイタチのパスル全体よりも悪臭を放つコードの匂いを発していることを私は知っています。

より良い方法は何ですか?

4

2 に答える 2

9
listInts.RemoveAll(t => t < 0)
于 2012-06-02T00:04:25.703 に答える
7

私はLINQを使用します:

listInts = listInts.Where(i => i >= 0).ToList();

これがどのように使用されるかによっては、ToList()呼び出しを回避し、値を再保存しないこともできます。

var positiveInts = listInts.Where(i => i >= 0);

これにより、必要に応じて列挙できます。

リストをその場で変更する必要がある場合List<T>.RemoveAllは、実際にはより効率的な方法です。

listInts.RemoveAll(i => i < 0);

ただし、これは副作用を引き起こすメソッドであり、他の LINQ 拡張メソッドを使用している場合に混乱を招く (したがってメンテナンスを妨げる) 傾向があるため、私はこれを好みません。

于 2012-06-02T00:03:57.210 に答える