首页 > 解决方案 > 弹出后值不离开堆栈(堆栈)

问题描述

堆栈由分组的列表形成。然后有几个 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());
}

标签: c#listgenericsstack

解决方案


“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 库如何处理内存。非常感谢大家!)


推荐阅读