C# 中的多维数组列表或列表?

Posted

技术标签:

【中文标题】C# 中的多维数组列表或列表?【英文标题】:Multi-dimensional arraylist or list in C#? 【发布时间】:2010-12-08 11:11:51 【问题描述】:

是否可以在 C# 中创建多维列表? 我可以像这样创建一个多维数组:

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

但我希望能够使用列表或数组列表中的一些功能,例如能够添加和删除元素。

【问题讨论】:

请记住,实际上不可能从多维数组中任意添加或删除单元格,您可能正在寻找某种形式的数组数组或列表列表,已经给出的答案提供了. 【参考方案1】:

您可以创建列表列表

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

【讨论】:

是的。可能希望通过使用 MultiList 来使其通用: List>. 这篇文章拯救了我的周末:D 在最后一个示例中,我认为您希望将两个 Add 都包含在 if 语句块中。 @DiskCrasher,差不多,我认为第二个 Add 需要有自己的条件,但很好 - 谢谢! 这不是多维的,是二维的。【参考方案2】:

你只需像这样列出一个列表:

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

【讨论】:

请问如何将字符串添加到第二个列表中?【参考方案3】:

不完全是。但是你可以创建一个列表列表:

var ll = new List<List<int>>();
for(int i = 0; i < 10; ++i) 
    var l = new List<int>();
    ll.Add(l);

【讨论】:

【参考方案4】:

根据您的具体要求,您最好使用以下类型的锯齿状数组:

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

或者你可以用列表或其他一些类似的结构做得很好。

【讨论】:

【参考方案5】:

如果你想修改它,我会选择以下任何一种:

List<string[]> results;

-- 或--

List<List<string>> results;

根据您的需要...

【讨论】:

以上是关于C# 中的多维数组列表或列表?的主要内容,如果未能解决你的问题,请参考以下文章

Scratch中间接实现多维数组支持

连接两个单维列表以获得一个多维列表

python怎么操作多维数组元素

python 如何获取数组(列表)长度? len()

如何反转多维数组中的重复值

PHP多维数组到无序列表,建立url路径