web-dev-qa-db-ja.com

C#の多次元配列リストまたはリスト?

C#で多次元リストを作成することはできますか?次のような多次元配列を作成できます。

 string[,] results = new string[20, 2];

しかし、要素を追加および削除できるように、リストまたは配列リストの機能の一部を使用できるようにしたいと思います。

11
etoisarobot

リストのリストを作成できます

   public class MultiDimList: List<List<string>> {  }

またはキーアクセス可能なリストの辞書

   public class MultiDimDictList: Dictionary<string, List<int>>  { }
   MultiDimDictList myDicList = new MultiDimDictList ();
   myDicList.Add("ages", new List<int>()); 
   myDicList.Add("Salaries", new List<int>()); 
   myDicList.Add("AccountIds", new List<int>()); 

@ user420667からのコメントに提案を実装するための汎用バージョン

  public class MultiDimList<T>: List<List<T>> {  }

そして辞書のために、

   public class MultiDimDictList<K, T>: Dictionary<K, List<T>>  { }

  // to use it, in client code
   var myDicList = new MultiDimDictList<string, int> ();
   myDicList.Add("ages", new List<T>()); 
   myDicList["ages"].Add(23);
   myDicList["ages"].Add(32);
   myDicList["ages"].Add(18);

   myDicList.Add("salaries", new List<T>());
   myDicList["salaries"].Add(80000);
   myDicList["salaries"].Add(100000);

   myDicList.Add("accountIds", new List<T>()); 
   myDicList["accountIds"].Add(321123);
   myDicList["accountIds"].Add(342653);

または、さらに良いことに...

   public class MultiDimDictList<K, T>: Dictionary<K, List<T>>  
   {
       public void Add(K key, T addObject)
       {
           if(!ContainsKey(key)) Add(key, new List<T>());
           if (!base[key].Contains(addObject)) base[key].Add(addObject);
       }           
   }


  // and to use it, in client code
    var myDicList = new MultiDimDictList<string, int> ();
    myDicList.Add("ages", 23);
    myDicList.Add("ages", 32);
    myDicList.Add("ages", 18);
    myDicList.Add("salaries", 80000);
    myDicList.Add("salaries", 110000);
    myDicList.Add("accountIds", 321123);
    myDicList.Add("accountIds", 342653);

編集:ネストされたインスタンスにAdd()メソッドを含めるには:

public class NestedMultiDimDictList<K, K2, T>: 
           MultiDimDictList<K, MultiDimDictList<K2, T>>: 
{
       public void Add(K key, K2 key2, T addObject)
       {
           if(!ContainsKey(key)) Add(key, 
                  new MultiDimDictList<K2, T>());
           if (!base[key].Contains(key2)) 
               base[key].Add(key2, addObject);
       }    
}
33
Charles Bretana

次のようなリストのリストを作成するだけです。

List<List<string>> results = new List<List<string>>();

そしてそれはあなたが望む機能を使用するだけの問題です

results.Add(new List<string>()); //adds a new list to your list of lists
results[0].Add("this is a string"); //adds a string to the first list
results[0][0]; //gets the first string in your first list
6
Joseph

ではない正確に。ただし、リストのリストを作成できます。

var ll = new List<List<int>>();
for(int i = 0; i < 10; ++i) {
    var l = new List<int>();
    ll.Add(l);
}
4
Mehrdad Afshari

正確な要件に応じて、次のような並べ替えのギザギザの配列で最善を尽くすことができます。

List<string>[] results = new { new List<string>(), new List<string>() };

または、リストのリストまたは他のそのような構成でうまくいくかもしれません。

1
John Gietzen

これを変更する場合は、次のいずれかを使用します。

List<string[]> results;

-または-

List<List<string>> results;

ニーズに応じて...

1
csharptest.net