定义二维动态数组

时间:2009-12-21 10:24:01

标签: c# .net arrays

如何定义二维动态数组? 如果我想使用List<>,我可以将它用于两个维度吗?

5 个答案:

答案 0 :(得分:10)

我所知道的没有内置动态等效的二维数组,但你可以很容易地获得相同的功能。

使用此API定义Coordinate类:

public class Coordinate : IEquatable<Coordinate>
{
     public Coordinate(int x, int y);
     public int X { get; }
     public int Y { get; }
     // override Equals and GetHashcode...
}

您现在可以创建这些坐标实例的集合。

如果您创建HashSet<Coordinate>,则可以保证如果已添加坐标,则无法添加坐标,因为它会覆盖等于。

如果需要,可以将坐标扩展为Coordinate<T>,如下所示:

public class Coordinate<T> //...
{
    // previous stuff...

    public T Item { get; set; }
}

这将允许您将强类型项与每个坐标相关联,如下所示:

var items = new HashSet<Coordinate<string>>();
items.Add(new Coordinate<string>(1, 4) { Item = "Foo" });
items.Add(new Coordinate<string>(7, 19) { Item = "Foo" });
// ...

答案 1 :(得分:2)

这将是这样的:

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

但是我觉得为此使用List是不切实际的,更好地使用数组......

答案 2 :(得分:2)

您可以使用列表,例如列表&gt;和c#中的列表非常快。

但是通过二维数组你需要像:

int[,] arr = new int[100,100];

这应该比列表更快。

答案 3 :(得分:1)

你应该看看这里:Arrays Tutorial in C#。无论如何,这里的语法是:type[,] name用于多维数组,type[][] name用于锯齿状数组(对于要存储在数组中的对象类型,更改type)。

答案 4 :(得分:0)

对于你不能使用的数组,它们永远不会“动态”。

使用列表你不能(除非你通过提供额外的索引器使它看起来像一个),除非你只是在寻找列表列表(不是多维的)。

那将是(对于字符串列表的列表):

List<List<string>>