2009-06-11 5 views
0

私はintのリストを返すlinqクエリを持っています。私はリスト内のすべての項目を数えたいと思う。番号0のすべてのアイテムを数え、リストから0のアイテムを削除します。linq:クエリのサブセット内のアイテムをカウントする

私は単純な例を示してください、私は醜いです。

+0

あなたの例を少なくとも投稿できませんでしたか? – Joey

+1

おそらく、すべてのレコードに対してcount linqクエリを実行し、0でないアイテムのリストを返すほうが簡単でしょう.2つのトランザクションになりますが、私の場合はより速くなると私に伝えます。 –

+0

@andrew、これは私がやったことです。 thx – zsharp

答えて

1

おそらく最良の方法:

List<int> list = GetList(); 

int countAll = list.Count; 
int countZero = list.RemoveAll(i => i == 0); 
//RemoveAll returns the number of elements removed = the count of 0es 

ナイーブ方法:

List<int> list = GetList(); 

int countAll = list.Count; 
int countZero = list.Count(i => i == 0); 

//remove zeroes 
for(int i = list.Count - 1; i >= 0; i--) 
    if(list[i] == 0) list.RemoveAt(i); 

おそらく-よりも速いこと-it's専用-1-渡すので、スルー方法:

List<int> list = GetList(); 

int countAll = list.Count; 
int countZero = 0; 

//remove zeroes 
for(int i = list.Count - 1; i >= 0; i--) 
    if(list[i] == 0) 
    { 
     list.RemoveAt(i); 
     countZero++; 
    } 
+0

oops - 間違った投稿をコメントしました – Jazzy

2
IList<int> intList = SomeFunctionThatReturnsInts(); 

int count = intList.Count(); 
int zeroCount = intList.Where(v => v == 0).Count(); 
intList.RemoveAll(v => v == 0); 
関連する問題