[英]Divide List in Equal Parts
我有可能有一些大名單50,000
以上的項目,我所要做的操作對每個item.takes一些X
現在的時間,如果我用傳統的方法,並做以連續的方式操作它絕對需要X * 50,000
平均。
我計划優化並節省一些時間,並決定使用Background Worker
因為它們之間沒有依賴關系。計划將List分成4個部分,並在單獨的Background Worker
使用它們。
我想問問
這個方法是DUMB嗎?
2.還有其他更好的方法嗎?
3.建議一個漂亮而干凈的方法將List分成4個相等的部分?
謝謝
您還可以將其拆分為組。
我沒有看到它的內置序列方法,所以這是低級方式。 請指出任何錯誤。 我在學習。
static List<T[]> groups<T>(IList<T> original, uint n)
{
Debug.Assert(n > 0);
var listlist = new List<T[]>();
var list = new List<T>();
for (int i = 0; i < original.Count(); i++)
{
var item = original[i];
list.Add(item);
if ((i+1) % n == 0 || i == original.Count() - 1)
{
listlist.Add(list.ToArray());
list.Clear();
}
}
return listlist;
}
另一個版本,基於linq。
public static List<T[]> groups<T>(IList<T> original, uint n)
{
var almost_grouped = original.Select((row, i) => new { Item = row, GroupIndex = i / n });
var groups = almost_grouped.GroupBy(a => a.GroupIndex, a => a.Item);
var grouped = groups.Select(a => a.ToArray()).ToList();
return grouped;
}
這是優化大型集合上類似,獨立操作的好方法。 但是,您應該查看.NET 4.0中的Parallel.For方法。 它為您完成所有繁重的工作:
http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.for.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.