我需要优化以下foreach
循环。 foreach循环需要更多时间才能获得唯一的项目。
而是可以将FilterItems
转换为列表集合。如果是这样的话怎么做。然后我将轻松地从中获取独特的物品。
当我在FilterItems中有5,00,000个项目时会出现问题。
请提供一些方法来优化以下代码:
int i = 0;
List<object> order = new List<object>();
List<object> unique = new List<object>();
// FilterItems IS A COLLECTION OF RECORDS. CAN THIS BE CONVERTED TO A LIST COLLECTION DIRECTLY, SO THAT I CAN TAKE THE UNIQUE ITEMS FROM IT.
foreach (Record rec in FilterItems)
{
string text = rec.GetValue(“Column Name”);
int position = order.BinarySearch(text);
if (position < 0)
{
order.Insert(-position - 1, text);
unique.Add(text);
}
i++;
}
答案 0 :(得分:2)
当我们对它没有任何了解时,将“将FilterItems转换为列表”的含义还不清楚,但你可以考虑在之后对进行排序,你已经获得了所有项目,而不是当你走的时候:
var strings = FilterItems.Select(record => record.GetValue("Column Name"))
.Distinct()
.OrderBy(x => x)
.ToList();
在这里使用Distinct()
将避免对大量相同的项目进行排序 - 看起来你只想要不同的项目。
如果您希望unique
符合原始订单但order
为相同的商品,只需排序,您可以使用:
var unique = FilterItems.Select(record => record.GetValue("Column Name"))
.Distinct()
.ToList();
var order = unique.OrderBy(x => x).ToList();
现在Distinct()
无法保证保留顺序 - 但它在当前实现中也是如此,而且这也是自然实现最多的。