📜  C#中的Stack.ToArray()方法(1)

📅  最后修改于: 2023-12-03 15:30:19.101000             🧑  作者: Mango

C#中的Stack.ToArray()方法

在C#中,Stack是一个非常常见的数据结构,它表示一个后进先出(LIFO)的栈,其中元素可以通过Push方法加入栈中,通过Pop方法从栈中弹出。

有时候,我们需要将Stack中的元素以数组的形式返回,这时候就可以使用Stack.ToArray()方法。

用法

Stack.ToArray()方法定义如下:

public T[] ToArray();

它返回一个T类型的数组,其中的元素与Stack中的元素顺序一致。

示例

以下是一个简单的示例,演示如何使用Stack.ToArray()方法:

Stack<string> stringStack = new Stack<string>();

stringStack.Push("apple");
stringStack.Push("banana");
stringStack.Push("orange");

string[] stringArray = stringStack.ToArray();

foreach (string str in stringArray)
{
    Console.WriteLine(str);
}

运行上述代码,输出结果如下:

orange
banana
apple

在这个例子中,我们首先创建了一个Stack类型的对象stringStack,并将三个字符串“apple”、“banana”和“orange”分别压入栈中。

然后,我们使用Stack.ToArray()方法将Stack中的元素以数组的形式返回,并赋值给一个字符串数组stringArray。

最后,我们使用foreach循环遍历这个数组,将其中的元素依次输出。

注意事项

需要注意的是,当Stack的元素类型为引用类型时,在使用Stack.ToArray()方法时,返回的数组中的元素还是原来Stack中元素的引用。

也就是说,如果修改了返回数组中的某个元素,那么这个修改也会作用于Stack中的相应元素。

Stack<List<int>> listStack = new Stack<List<int>>();

List<int> list1 = new List<int> { 1 };
List<int> list2 = new List<int> { 2 };
List<int> list3 = new List<int> { 3 };

listStack.Push(list1);
listStack.Push(list2);
listStack.Push(list3);

List<int>[] listArray = listStack.ToArray();

listArray[0].Add(4);  // 对返回的数组做修改

foreach (List<int> list in listStack)
{
    Console.WriteLine(list.Count);  // 输出 1 2 3 4
}

在这个例子中,我们首先创建了一个Stack<List>类型的对象listStack,并将三个List类型的对象分别压入栈中。

然后,我们使用Stack.ToArray()方法将Stack中的元素以数组的形式返回,并赋值给一个List[]类型的数组listArray。

接着,我们对返回的数组中的第一个List对象增加了一个元素4。

最后,我们使用foreach循环遍历Stack中的元素,并输出它们的Count属性。

可以看到,输出结果为1 2 3 4,也就是说我们对返回的数组做的修改也改变了Stack中相应元素的值。

因此,如果不希望修改Stack中的元素,需要使用副本或者深拷贝的方式获取元素。