如何定义二维动态数组? 如果我想使用List<>,我可以将它用于两个维度吗?
答案 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>>