如何在C#中创建未知长度的2D数组?

时间:2016-04-16 17:32:22

标签: c# arrays list dictionary

所以我需要存储如下所示的数据:

map[x,y] = z;
map[1,3] = 5;
map[2,6] = 8;

问题是x和y的长度未知。我假设我需要像List或Dictionary这样的东西,但我不确定哪一个或如何实现它(从中添加和获取值)。

2 个答案:

答案 0 :(得分:3)

宣布和初始化2D列表:

List<List<int>> list2D = new List<List<int>>();

添加到第一个维度(整数列表):

list2D.Add(new List<int>());

添加到列表的第二维(第一维的索引和你添加的整数值):

list2D[0].Add(123);

以下是List对象上的MSDN文章:

https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

答案 1 :(得分:2)

  

public object this [int x,int y] {get;组; }

对我而言,这是在C#6或更高版本中使用的最简单选项,因为一旦创建了类,我就不必初始化或创建子集合。

class Program
{
    static void Main(string[] args)
    {
        var array = new Matrix();
        array[1,0] = "cat";
        array[0,1]="dog";
        Console.WriteLine(array[0, 1]);
        array[0, 1] = null;
    }
}

class Matrix
{
    private Dictionary<string,Object> Data = new Dictionary<string,object>();
    public object this[int x, int y]
    {
        get
        {
            string key = this.GetKey(x, y);
            return Data.ContainsKey(key) ? Data[key] : null;
        }
        set
        {
            string key = this.GetKey(x, y);
            if(value==null)
                Data.Remove(key);
            else
                Data[key] = value;
        }
    }
    private string GetKey(int x, int y)
    {
        return String.Join(",", new[] { x, y });
    }
}