2016-07-22 24 views

Antwort

3

Sie erreichen es mit LINQ:

Stack<int> stack = new Stack<int>(); 
stack.Push(1); 
stack.Push(2); 
stack.Push(3); 
stack.Push(4); 

int top = stack.ElementAt(0); // Returns 4 
int next = stack.ElementAt(1); // Returns 3 

Wenn Sie jedoch youself die Elemente versuchen, finden durch den Index auf einen Stapel zugreifen zu können, dann werden Sie sicherlich etwas falsch zu machen, und Sie sollten Ihre Lösung neu gestalten.

+1

Ich kann falsch liegen, aber Stack in C# als Array implementiert und zwei Positionen Variable Start und Ende (https://msdn.microsoft.com/en-us/library/ms379571(v=vs.80) .aspx). Wenn das stimmt, sehe ich das Problem nicht, ein Element nach Index auf ähnliche Weise zu erhalten, wie es in einem einfachen Array passiert. Mehr zu sagen, ich war überrascht, dass es keine solche Methode im Stack selbst gibt und Sie müssen es über Linq-Erweiterung tun. –

0

Es ist möglich, ElementAt() zu verwenden, wie von Matias gezeigt. Sie können Peek auch verwenden, um zu sehen, was oben ist, ohne es zu knacken. Sie können auch in ein Array konvertieren und erhalten so einen Wert nach Index.

var s = new Stack<int>(); 
s.Push(1); 
s.Push(2); 

var value = s.ToArray()[1]; 

Sie sollten sich fragen, ob dies sinnvoll ist. Alles, was Sie jemals tun können, ist, einen Schnappschuss des Stapels zu einem bestimmten Zeitpunkt zu erstellen. Es gibt auch Nebenläufigkeitsprobleme zu berücksichtigen.

UPDATE:

Scheint, wie Matias und ich kam mit sehr ähnlichen Antworten auf. Er ist eine richtigere Antwort darauf, was die Frage verlangt. Der ToArray() - Ansatz gibt Ihnen einen konsistenten Snapshot, der möglicherweise etwas stabiler ist. Nachfolgende Aufrufe von ElementAt() geben möglicherweise andere Antworten und können eine Ausnahme auslösen, wenn der Stapel zwischen den Aufrufen eingefügt wurde.

+0

Dies ist möglich, indem man 'ElementAt' ausführt – TheDude

0

Es ist möglich, das Element des Stapels nach Index auszuwählen, indem die Methoden ElementAt (Int32) oder ElementAtOrDefault (Int32) aufgerufen werden.

Als Seite beachten, wenn Sie C# vertraut sind, versuchen immer, Antworten zu finden auf

1) MSDN 2) referencesource.microsoft.com

Es ist oft viel schneller und zuverlässiger dann auf nach Informationen suchen SO =)