以下是我用来计算列表中元素的幂集的两段代码
代码 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;
}
第一个代码使用了一个新语句,如果我尝试找出计数为 30 的列表的幂集,则会出现 OutOfMemoryException。所以为了节省内存,我使用 Clear() 和 TrimExcess() 来获取列表,就好像它是使用新语句初始化的一样在代码2中。但是这两个代码返回不同的结果。我不明白为什么会这样。请帮忙。
下面的两块是不是做同样的事情
for(....)
{
var sublist = new List<int>();
for(......)
{
//some code
}
}
和
var sublist = new List<int>();
for(.....)
{
sublist.Clear();sublist.TrimExcess();
for(.... )
{
//some code
}
}