linq:计算查询子集中的项

linq:计算查询子集中的项,linq,Linq,我有一个linq查询,它返回一个int列表。我想计算列表中的所有项。然后计算所有编号为0的项目,然后从列表中删除编号为0的项目 请给出一个简单的例子,我的方法很难看。可能是最好的方法: List<int> list = GetList(); int countAll = list.Count; int countZero = list.RemoveAll(i => i == 0); //RemoveAll returns the number of elements remo

我有一个linq查询,它返回一个int列表。我想计算列表中的所有项。然后计算所有编号为0的项目,然后从列表中删除编号为0的项目


请给出一个简单的例子,我的方法很难看。

可能是最好的方法:

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 List=GetList();
int countAll=list.Count;
int countZero=list.RemoveAll(i=>i==0);
//RemoveAll返回删除的元素数=0个元素的计数

天真的方法:

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);
List List=GetList();
int countAll=list.Count;
int countZero=list.Count(i=>i==0);
//删除零
对于(int i=list.Count-1;i>=0;i--)
if(list[i]==0)list.RemoveAt(i);
可能会更快,因为它是唯一的一次通过方法:

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++;
    }
List List=GetList();
int countAll=list.Count;
int countZero=0;
//删除零
对于(int i=list.Count-1;i>=0;i--)
如果(列表[i]==0)
{
列表。删除(i);
countZero++;
}

可能是最好的方法:

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 List=GetList();
int countAll=list.Count;
int countZero=list.RemoveAll(i=>i==0);
//RemoveAll返回删除的元素数=0个元素的计数

天真的方法:

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);
List List=GetList();
int countAll=list.Count;
int countZero=list.Count(i=>i==0);
//删除零
对于(int i=list.Count-1;i>=0;i--)
if(list[i]==0)list.RemoveAt(i);
可能会更快,因为它是唯一的一次通过方法:

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++;
    }
List List=GetList();
int countAll=list.Count;
int countZero=0;
//删除零
对于(int i=list.Count-1;i>=0;i--)
如果(列表[i]==0)
{
列表。删除(i);
countZero++;
}
IList intList=somefunctionthattreturnsints();
int count=intList.count();
int zeroCount=intList.Where(v=>v==0.Count();
RemoveAll(v=>v==0);
IList intList=somefunctionthattreturnsints();
int count=intList.count();
int zeroCount=intList.Where(v=>v==0.Count();
RemoveAll(v=>v==0);

您能否至少发布您的示例?对所有记录运行count linq查询,然后返回非0项的列表可能会更容易。这将是两次交易,但我的直觉告诉我会更快。@andrew,这就是我最后做的。您是否至少可以发布您的示例?对所有记录运行count linq查询,然后返回非0项的列表可能会更容易。这将是两次交易,但我的直觉告诉我会更快。@andrew,这就是我最后做的。谢谢