我有两个整数堆栈 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]);
}
}
}
及其工作原理,但我不确定它是否是最佳解决方案。
是否有更好的方法可以执行此操作,或者有任何内置方法可以实现此目的?
如果不使用数组就可以完成。
答案 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());