2016-07-22 14 views

答えて

3

あなたは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 

あなたはyouselfはインデックスにより、スタック上の要素にアクセスしようとして発見した場合しかし、あなたは確かに間違って何かをやっている、とソリューションを再設計する必要があります。

+1

私は間違っているかもしれませんが、C#のスタックは配列として実装され、2つの位置の変数startとend(https://msdn.microsoft.com/en-us/library/ms379571(v=vs.80) ).aspx)。 これが真実であれば、単純な配列の場合と同様にインデックスで要素を取得するのは問題ではありません。 さらに言えば、Stack自体にこのようなメソッドがないことに驚き、Linq拡張を使用してそれを行う必要があります。 –

0

Matiasが示すように、ElementAt()を使用することは可能です。 Peekを使用して、上に何が表示されているかを確認することもできます。また、配列に変換し、そのようにインデックスで値を取得することもできます。

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

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

あなたはこれが賢明かどうかを尋ねる必要があります。ある時点でスタックのスナップショットを取得するだけで可能なのはこれだけです。考慮する同時実行性の問題もあります。

UPDATE:

マティアスと私は非常によく似た答えを思い付いたように思えます。彼の質問は何を求めているのか、より正確な答えです。 ToArray()アプローチは、より安定したスナップショットを提供します。後でElementAt()を呼び出すと、さまざまな回答が得られ、呼び出しの間にスタックがポップされた場合に例外がスローされることがあります。

+0

'ElementAt'を実行することで可能です – TheDude

0

ElementAt(Int32)メソッドまたはElementAtOrDefault(Int32)メソッドを呼び出すことで、スタックの要素をインデックスで選択することができます。

あなたがC#に新しいしている場合は注意点として、常に

1で答えを探してみてください)MSDN 2)referencesource.microsoft.com

それは多くの場合、道より速く、より信頼性の高いです、その後の情報を探してくださいSO =)

関連する問題