2012-02-20 83 views

回答

1

如果你需要通過索引的項目,也許List<T>將是一個更合適的數據結構?

一個堆棧只能讓你獲得最近插入的項目。有辦法繞過這種行爲,但肯定如果你通過索引需要的項目這工作得更好:

var myList = new List<Int32>(); 
myList.Add(100); 
myList.Add(200); 
myList.Add(300); 
myList.Add(400); 
Console.Out.WriteLine(myList[2]); // Prints "300" 
+0

除列表以外,是否有任何方法稱爲stack.getindex [0]或任何其他 – user1220052 2012-02-20 02:10:39

+0

不在內置堆棧中。您需要將其轉換爲數組或列表來執行此操作。有這樣的內置方法:'myStack.toArray()'或LINQ'ToList()'擴展方法。 – 2012-02-20 02:14:14

+0

kk mystack.to Array() – user1220052 2012-02-20 02:16:37

4

您可以使用ElementAt()這一點。

Stack<Int32> foo = new Stack<Int32>(); 
foo.Push(5); //element 1 
foo.Push(1); //element 0 
int val = foo.ElementAt(1); //This is 5 

由於堆棧是最後的先出,如果你想獲得您添加到堆棧中的第一個項目,你可以使用:

int val = foo.ElementAt(foo.Count - 1); 

請記住,ElementAt是一個LINQ擴展方法將枚舉堆棧作爲數組並返回所需的索引。對於大型堆棧或性能至關重要的地方,您可能需要考慮使用另一種數據結構,如List<T>

+3

這是利用IEnumerable上的LINQ擴展方法。應該讓OP瞭解正在進行的體操運動以實現這一目標。 – 2012-02-20 02:17:16

+0

thnkx你所以邁克這是非常有幫助 – user1220052 2012-02-20 02:18:24

+0

@ChrisShain - 是的,絕對是一個有效的點.. – 2012-02-20 02:18:59

相關問題