c# - 弹出后值不离开堆栈(堆栈)
问题描述
堆栈由分组的列表形成。然后有几个 foreachsPop
被调用。但是堆栈中的值的数量并没有减少。请解释原因。先感谢您!
public static void N(){
var test = new List<int>(){1,1,1,2,2,3,3,3,3,4,4,5,6,7,7,7,7,8};
var testGr = test.GroupBy(x=>x);
var stacked = testGr.Select(x=> new {
num = x.Key,
stack = new Stack<int>(x)
});
var testNumOne = stacked.First(x=>x.num==1);
Console.WriteLine(testNumOne.stack.Count());
foreach(var x in new List<int>(){1,2,1,2,3}){
var flush = stacked.First(y => y.num == x).stack.Pop();
}
testNumOne = stacked.First(x=>x.num==1);
Console.WriteLine(testNumOne.stack.Count());
}
解决方案
“stacked”的副本解决了问题(通过stacked.ToList())
public static void Main()
{
var test = new List<int>(){1,1,1,2,2,3,3,3,3,4,4,5,6,7,7,7,7,8};
var testGr = test.GroupBy(x=>x);
var stacked = testGr.Select(x=> new {
num = x.Key,
stack = new Stack<int>(x)
});
var stackedCopy = stacked.ToList();
var testNumOne = stackedCopy.First(x=>x.num==1);
Console.WriteLine(testNumOne.stack.Count());
foreach(var x in new List<int>(){1,2,1,2,3}){
var flush = stackedCopy.First(y => y.num == x).stack.Pop();
}
testNumOne = stackedCopy.First(x=>x.num==1);
Console.WriteLine(testNumOne.stack.Count());
}
我已经在学习 Linq 库如何处理内存。非常感谢大家!)
推荐阅读
- javascript - 使用 d3 为活动任务的折线图准备数据
- python - python查找特定文件的全局变量而不导入它
- imagemagick-convert - 将图像裁剪到较小的图层?平铺较小的层以匹配较大的层?
- vhdl - 为什么信号分配不在第一次迭代中执行?高密度脂蛋白
- python - 除一个必须传递的所有可选参数
- database-design - 外键序列
- javascript - 如何通过 evt 对象获取元素的角色?或任何其他可区分的属性
- flutter - 在显示 HomeScreen 之前登录后从 firestore 获取数据
- c++ - 在未评估的上下文中使用概念会产生不一致的结果
- android - 房间 SQLite 继承