以下是兩段代碼我用於計算在一個列表在c#重置列表
碼1)
public static List<List<int>> getCpower(List<int> list)
{
var result = new List<List<int>>();
for (int i = 0; i < (1 << list.Count); i++)
{
var sublist = new List<int>();
for (int j = 0; j < list.Count; j++)
{ if ((i & (1 << j)) != 0)
{ sublist.Add(list[j]);
}
}
result.Add(sublist);
}
return result;
}
碼2)
public static List<List<int>> getCpower(List<int> list)
{
var result = new List<List<int>>();var sublist = new List<int>();
for (int i = 0; i < (1 << list.Count); i++)
{
sublist.Clear();sublist.TrimExcess();
for (int j = 0; j < list.Count; j++)
{ if ((i & (1 << j)) != 0)
{ sublist.Add(list[j]);
}
}
result.Add(sublist);
}
return result;
}
第一元件的功率組代碼使用了一個新的語句,如果我試圖找出列表的powersets與計數30,然後OutOfMemoryException出現。所以爲了節省內存我使用Clear()和TrimExcess()來獲取列表,就好像它是使用一個新的語句在鱈魚初始化E2。但是這兩個代碼返回不同的結果。我不明白爲什麼會發生這種情況。請幫忙。
是兩個以下兩件沒有做同樣的事情
for(....)
{
var sublist = new List<int>();
for(......)
{
//some code
}
}
和
var sublist = new List<int>();
for(.....)
{
sublist.Clear();sublist.TrimExcess();
for(....)
{
//some code
}
}
我猜你知道你會得到1073741824套,其中有30 –
2^30。是的,我確實有一個想法,它的功率有多大。 – Dynamite