有没有一种更简单的方法,我可以使用c#中的堆栈来使用这个整数数组

本文关键字:堆栈 数组 整数 我可以 一种 更简单 有没有 方法 可以使 | 更新日期: 2023-09-27 18:12:36

我有一个整数数组我想把整个数组压入堆栈中例如,我有一个由

组成的整数数组
 int[] myArrayInt = new int[10];
 Stack<int> myStack = new Stack<int>();
 for(int i=0;i<10;i++){
        myArrayInt[i]=i;
 }
 myStack.Push(myArrayInt);

现在它不允许我这样做因为我必须把数组中的每个整数都压入堆栈

 myStack.Push(myArrayInt[0]);    

但是我希望我的堆栈是这样的

 ---------------
 0123456789    bottom of stack
 ---------------
不是

 9876543210  bottom of stack
 ---------------

我知道我可以只使用一个for循环将所有的整数数组到堆栈,然后使用一个for循环,当我从堆栈中弹出,for循环,回到我的整数数组的顺序相同,但我想知道如果有另一种方式,我可以避免使用for循环和流行函数的一个调用堆栈的我得到所有的整数数组回到我吗?

我正在学习深度优先搜索算法,我正在使用堆栈来跟踪我的程序所处的当前状态。

有没有一种更简单的方法,我可以使用c#中的堆栈来使用这个整数数组

没有以IEnumerable为参数的Push重载,但是有一个构造函数重载。您可以在数组上使用.Reverse,并将结果传递给构造函数,以使堆栈看起来像0123456789 <--Bottom

var myInts = new { 0, 1, 2, /*etc*/ };
var stack = new Stack<int>(myInts.Reverse());

使用ToArray方法将其转回数组:

var outInts = stack.ToArray();

我是这样做的:

// Eliminate the for-loop to create your integer array
var intArray = Enumerable.Range(0, 9); 
// The constructor to Stack<T> takes an IEnumerable<T>
var myStack = new Stack<int>(intArray); 
... perform Stack operations
// To produce a T[] from what remains in the Stack<T>
var outIntArray = myStack.ToArray();

现在,由于您没有解释使用Stack的目的,因此在这里似乎完全没有必要。正如musefan在评论中指出的那样,您可以简单地将所有这些替换为var outIntArray = Enumerable.Range(0, 9);