C# 如何确定数组是否在堆栈中?

C# 如何确定数组是否在堆栈中?,c#,arrays,stack,contains,any,C#,Arrays,Stack,Contains,Any,因此,我试图确定堆栈中是否存在相同值的数组 Stack<string> stackOfStrings = new Stack<string>(); stackOfStrings.Push("dog"); stackOfStrings.Push("cat"); Debug.WriteLine("stackOfString contains cat: " + stackOfStrings.Contains("cat")); Debug.WriteLine("stac

因此,我试图确定堆栈中是否存在相同值的数组

Stack<string> stackOfStrings = new Stack<string>();
stackOfStrings.Push("dog");
stackOfStrings.Push("cat");
Debug.WriteLine("stackOfString contains cat: " + 
    stackOfStrings.Contains("cat"));
Debug.WriteLine("stackOfString contains dog: " + 
    stackOfStrings.Contains("dog"));

Stack<int[]> stackOfIntArrays = new Stack<int[]>();
stackOfIntArrays.Push(new int[]{0,1});
stackOfIntArrays.Push(new int[]{1,1});
int[] array01 = new int[]{0,1};
int[] anotherArray01 = new int[]{0,1};
int[] array11 = new int[] { 1, 1 };

Debug.WriteLine("SequenceEqual can compare arrays of identical value: " + array01.SequenceEqual(anotherArray01));
Debug.WriteLine("SequenceEqual can be used to compare the top value of a stack: " + stackOfIntArrays.Peek().SequenceEqual(array11));
//I want the line below to evaluate to true 
Debug.WriteLine("Contains can be used to determine if an array of values is within the stack: " + stackOfIntArrays.Contains(array01));
我在这方面的研究已经得到了很多结果,可以看出一个数组是在另一个数组中还是另一个数组的子集,这就是我学习SequenceEqual的方法。看到它似乎只能检查堆栈中的顶部值,这不足以满足我的需要

我考虑过的另一种解决方案是将堆栈重新打包到新的堆栈,并在移动每个数组时检查它。然而,考虑到contains可以在整个堆栈中查找string类型的值,我的结论是int[]类型的值应该是可能的。如果没有,请提供最佳解决方案的指导。

对于非相等条件下的安全壳检查,请使用LINQ而不是
Contains

Debug.WriteLine(
    "Enumerable.Any can be used to determine if an array of values is within the stack: {0}"
,   stackOfIntArrays.Any(a => array01. SequenceEqual(a))
);

这相当于对任意条件的“contains if…”实现。

您希望知道堆栈中的任何元素序列是否等于特定值。这是否让您知道了如何实现它?如果您想让Contains()工作,那么您需要一个IEqualityComparer,它比默认的IEqualityComparer做得更多,它只检查对象标识。@EricLippert您是对的,我复制粘贴的OP的字符串而不读取它。非常感谢。
Debug.WriteLine(
    "Enumerable.Any can be used to determine if an array of values is within the stack: {0}"
,   stackOfIntArrays.Any(a => array01. SequenceEqual(a))
);