如何将不同的值从一个堆栈复制到另一个堆栈

时间:2019-02-05 07:37:03

标签: c#

我有两个整数堆栈 StackA StackB

StackA 具有以下值,但 StackB 没有内容。

StackA
-----
[40]
[11]
[56]
[10]
[11]
[56]

现在我需要将不同的值从 StackA 复制到 StackB 。我尝试过

    public static void CopyDistinctValues(Stack<int> source, Stack<int> destination)
    {
        int[] numArray = source.ToArray();
        for (int i = 0; i < numArray.Length; i++)
        {
            if (!destination.Contains(numArray[i]))
            {
                destination.Push(numArray[i]);
            }
        }
    }

及其工作原理,但我不确定它是否是最佳解决方案。

是否有更好的方法可以执行此操作,或者有任何内置方法可以实现此目的?

如果不使用数组就可以完成。

3 个答案:

答案 0 :(得分:5)

最短的方法是:

stackB = new Stack<int>(stackA.Distinct().Reverse());

需要反向操作,因为构造函数采用IEnumerable,而Stack的IEnumerable实现使其从最后一项开始。

答案 1 :(得分:0)

如果在这种情况下使用Linq怎么办

Stack<int> stacka = new Stack<int>(new[] { 40, 11, 56, 10, 11, 56 });
Stack<int> stackb = new Stack<int>(stacka.ToArray().Distinct());

答案 2 :(得分:0)

            Stack<int> StackA= new Stack<int>();
            StackA.Push(2);
            StackA.Push(3);
            StackA.Push(4);
            StackA.Push(5);
            StackA.Push(2);
            Stack<int> StackB = new Stack<int>();
            StackB = new Stack<int>(StackA.Distinct());