2012-04-17 10 views
4

多次元ガードを作成する必要があります。3つの値X、Y、Zをリストします。値を照会すると配列を削除する必要があるため、リストが必要です。多次元リストC#

クエリは次のようになります。リスト[0] [0] = X、リスト[0] [a] = Y、リスト[0] [2] = X 0と彼はすでに他の3つのすべてを削除します。

答えて

4

あなたは多次元リストを作成する必要がある場合、あなたはいつものようにリストのリストを作成することができます:それは割り当ての方法では存在しない値を交換しようとするものの

var multiDimensionalList = new List<List<string>>{ 
    new List<string>{"A","B","C"}, 
    new List<string>{"D","E","F"}, 
    new List<string>{"G","H","I"}, 
}; 
Console.WriteLine(multiDimensionalList[2][1]); // Prints H 

multiDimensionalList[2].RemoveAt(1); 
Console.WriteLine(multiDimensionalList[2][1]); // Prints I 

multiDimensionalList[2][1] = "Q"; 
Console.WriteLine(multiDimensionalList[2][1]); // Prints Q 

は承知しているであろう

multiDimensionalList[2][5] = "R"; // Throws an ArgumentOutOfRangeException 
0

あなたの質問は非常に理解しにくいですが、探しているものは配列の配列で実現できますか?これは多次元配列がいくつかの言語でどのように実装されるかです。

あなたのケースでは、List of Lists:List>を使用している可能性があります。そして、これは、外側リスト<>オブジェクトの最初の要素を削除することによって、 "他のすべての3つすべて"を削除するというあなたの要求を満たすでしょう。

+0

リストのように配列の配列になりますが、削除が簡単な場合はインデックスを使用するほうがいいですリスト –

+0

これは質問またはコメントですか?いずれにせよ、私は理解していない... –

0

ご迷惑をおかけいたしますが、ご質問は少し難解ですが、私はそれを刺すでしょう。 ArrayとListという単語は、C#ではまだまだ関連していないので、入れ替えないでください。私はあなたがあなたの[]括弧を使ってArrayを意味すると信じています。リストを使用することで、リストから特定の要素を削除することができます。 MSDNにはどのように進むべきかに関する良い情報があります。 List(T).Remove method

リストは、要素を削除したり、必要に応じて要素を追加したりするために自動的に再構成されます。

0

私はあなたがZを2番目のインデクサとして文字列と整数の両方を使用して、二回Xを参照されていませんが、と私はあなたのロジックを、次の午前わからない:例外をスローします。これらがタイプミスであると仮定して、私はあなたが望むものを推測します。

あなたはXY、AND Zプロパティを持つカスタムタイプを検討している、とあなたが説明した動作を与えるために、インデクサ:

あなたはまた、自分の価値観が何であるかの種類言及していないので、私は使用していますobjectが、あなた自身のタイプを代用して自由に感じる(またはジェネリック型)

public class MyType 
{ 
    private object[] backingArray = new object[3]; 
    public object this[int index] 
    { 
     get { return backingArray[index]; } 
     set { backingArray[index] = value; } 
    } 

    public object X 
    { 
     get { return backingArray[0]; } 
     set { backingArray[0] = value; } 
    } 
    public object Y 
    { 
     get { return backingArray[1]; } 
     set { backingArray[1] = value; } 
    } 
    public object Z 
    { 
     get { return backingArray[2]; } 
     set { backingArray[2] = value; } 
    } 
} 

あなたは、このようにそれを使用することができます。

List<MyType> list = new List<MyType>(); 
list = PopulateList(); // fill list with values 


var x = list[0][0]; 
var y = list[0][1]; 
var z = list[0][2]; 

もちろん、この実装は、常に3つの要素からなる2番目の次元に依存します。それが一貫しない場合、他の答えの一つがあなたのニーズに富んでいます。