以下は、リスト内の要素の累乗セットを計算するために使用した 2 つのコードです。
コード 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;
}
最初のコードは new ステートメントを使用し、カウント 30 のリストのパワーセットを見つけようとすると、OutOfMemoryException が発生します。メモリを節約するために、Clear() と TrimExcess() を使用して、新しいステートメントを使用して初期化されたかのようにリストを取得しました。コード2で。しかし、これら 2 つのコードは異なる結果を返します。なぜこれが起こっているのかわかりません。助けてください。
次の2つの部分は同じことをしていませんか
for(....)
{
var sublist = new List<int>();
for(......)
{
//some code
}
}
と
var sublist = new List<int>();
for(.....)
{
sublist.Clear();sublist.TrimExcess();
for(.... )
{
//some code
}
}