5 回答
TA贡献1993条经验 获得超5个赞
现在我需要循环遍历整个列表,搜索有 10 个条目的 Number 并将它们存储在新列表中。
Foeach 不太适合做这项工作。您需要 2 个 For 循环。一个用于每个(不同的)项目编号,一个用于比较。由于您的集合是有序的,因此您可以使用它来避免对基本集合进行多次迭代。每次新系列开始时,您都可以记住内循环的索引结束并在外循环中跳转到记住的位置:
for (int i = 0; i < NumberList.Count; i++)
{
tempList.Clear();
for (int j = i+1; j < NumberList.Count; j++)
{
if (NumberList[i].Number == NumberList[j].Number)
{
tempList.Add(NumberList[i]);
}
else
{
// Note that a new series of numbers has began and jump to this position
i = j;
break; // end this counting procedure
}
}
// at this point evalueate the counter
if (tempList.Count >= 10)
{
finalList.AddRange(tempList.Take(10));
}
}
简短的 Linq 解决方案可能如下所示:
NumberList.GroupBy(x => x.Number).Where(x => x.Count() >= 10).SelectMany(x => x.Take(10));
只需将具有相同值的所有数字收集到分组集合中即可。
然后对其应用过滤器,检查哪一个符合您出现 10 次或以上的标准。
然后仅选择这些项目/取消它们的分组并仅选取前 10 个;
TA贡献1780条经验 获得超5个赞
您可以使用 Linq 来执行此操作。例如,
var finalList = numberList .GroupBy(a => a.Number) .Where(a => a.Count() >= 10) .SelectMany(a => a.OrderBy(b => b.CloseTime).Take(10)) .ToList();
所以首先我们使用 来按数字分组GroupBy
。然后,我们使用 限制仅包含 10 个或更多条目的分组Where(a => a.Count() >= 10)
。然后我们使用SelectMany
来展平分组,并使用 来选择每个分组的前 10 个元素Take
,并使用OrderBy
来确保它们的顺序一致。
TA贡献1835条经验 获得超7个赞
NumberList .GroupBy(x => x.Number) .Where(groupings => grouping.Count() > 10) .SelectMany(groupings => groupings) .ToList()
TA贡献1998条经验 获得超6个赞
var tempList = new List<NumberList>(); // temporary list var finalList = tempList.GroupBy(t => t.Number) .Where(t => t.Count() >= 10) .SelectMany(t => t.Take(10)) //take 10 elements from filtered data .ToList();
TA贡献1811条经验 获得超5个赞
您可以在 Number 字段上创建一个不同的值,并使用不同的结果循环该对象
foreach (var item in numList.Select(x=> x.Number).Distinct())
{
int counter = 0;
if(numList.Where(x=> x.Number.Equals(item)).Count() >= 10 )
{
foreach( var item2 in numList.Where(x=> x.Number.Equals(item)) ){
if(counter <10 ) {
finalList.Add(item2);
counter ++;
}
}
}
}
foreach(var test in finalList)
Console.WriteLine(string.Format("{0}, {1}", test.Number, test.Profit));
- 5 回答
- 0 关注
- 223 浏览
添加回答
举报