Multi-dimensional arraylist or list in C#?

前端 未结 5 1779
面向向阳花
面向向阳花 2020-12-03 00:07

Is it possible to create a multidimensional list in C#? I can create an multidimensional array like so:

 string[,] results = new string[20, 2];
相关标签:
5条回答
  • 2020-12-03 00:25

    Not exactly. But you can create a list of lists:

    var ll = new List<List<int>>();
    for(int i = 0; i < 10; ++i) {
        var l = new List<int>();
        ll.Add(l);
    }
    
    0 讨论(0)
  • 2020-12-03 00:31

    You can create a list of lists

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

    or a Dictionary of key-accessible Lists

       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>()); 
    

    Generic versions, to implement suggestion in comment from @user420667

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

    and for the dictionary,

       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);
    

    or, even better, ...

       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);
    

    EDIT: to include an Add() method for nested instance:

    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);
           }    
    }
    
    0 讨论(0)
  • 2020-12-03 00:36

    If you want to modify this I'd go with either of the following:

    List<string[]> results;
    

    -- or --

    List<List<string>> results;
    

    depending on your needs...

    0 讨论(0)
  • 2020-12-03 00:38

    you just make a list of lists like so:

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

    and then it's just a matter of using the functionality you want

    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
    
    0 讨论(0)
  • 2020-12-03 00:43

    Depending on your exact requirements, you may do best with a jagged array of sorts with:

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

    Or you may do well with a list of lists or some other such construct.

    0 讨论(0)
提交回复
热议问题