繁体   English   中英

弹出后值不离开堆栈(堆栈<t> )</t>

[英]Values don't leave the stack after Pop (Stack<T>)

堆栈由分组的列表形成。 然后有几个调用Pop的 foreachs。 但是堆栈中的值的数量并没有减少。 请解释原因。 先感谢您!

    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 库如何与 memory 一起使用。 非常感谢大家!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM