繁体   English   中英

定义二维动态数组

[英]Defining two dimensional Dynamic Array

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

我所知道的没有二维数组的内置动态等价物,但你可以轻松地获得或多或少相同的功能。

使用此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...
}

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

如果您创建HashSet<Coordinate> ,则可以保证如果已经添加了Coordinate,则无法添加它,因为它会覆盖Equals。

如果需要,可以将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" });
// ...

这将是这样的:

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

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

你可以使用列表例如List>和c#中的列表非常快。

但是通过二维数组你需要这样的东西:

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

这应该比列表更快。

你应该看看这里: C#中的数组教程 无论如何这里是语法: type[,] name多维数组的type[,] nametype[][] name jagged数组的type[][] name (更改type为要存储在数组中的对象的类型)。

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

您可以使用列表(除非您通过提供额外的索引器使其看起来像一个),除非您只是查找列表列表(不是多维的)。

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

List<List<string>>
Dictionary<T, List<T>>

例如,如果 T 是“string”,你可以这样使用它:

var pathes = new Dictionary<string, List<string>>();

pathes.Add("X", new List<string>());
pathes["X"].Add("a");
pathes["X"].Add("b");
pathes["X"].Add("c");

pathes.Add("Y", new List<string>());
pathes["Y"].Add("b");
pathes["Y"].Add("z");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM