構造に動的なサイズ設定が必要なようです。そのためList<T>
、System.Collections.Generic名前空間に適切な選択があります。
var list = new List<int>();
list.Add(1); // keep adding
配列と同じようにインデックス付きアクセスを提供しますが、必要に応じて要素を追加し続けることができます。(インデックスを介した通常のランダムアクセスに加えて)最後の要素をすばやく取得するだけの場合は、インターフェイス用に最適化さLast()
れた拡張メソッド(および実装するもの)を使用して、最後の要素を直接返すことができます。シーケンス全体を列挙する必要のない要素。IList<T>
List<T>
ただし、完全な逆インデックスアクセスに似たものが必要なようです。そのためには、コーディングする必要があるかもしれません。再利用性のために、これをプロジェクトの拡張メソッドにして、必要な場所で使用できます。このようなものはあなたのニーズに合うはずです。
public static class ListExtensions
{
public static T FromEnd<T>(this IList<T> list, int position)
{
if (list == null || list.Count == 0)
{
throw new ArgumentException("list cannot be null or empty");
}
return list[(list.Count - 1) - position];
}
}
そしてそれを使うのは簡単です。
var myList = new List<int>() { 1, 2, 3, 4, 5 };
int item = myList.FromEnd(1);
Debug.Assert(item == 4);
もちろん、ここでのしわは、foreach
(標準を使用することもできますfor
)でループしたい場合、これはうまく機能しないことです。foreachを使用する場合は、単にuseforeach (var item in myList.Reverse()) { }
をループするか、svickの回答にコード化されているアプローチを利用できます。