如何创建一个二维动态长度数组?

8

我希望创建一个二维数组,但是不知道第一维的大小。

例如,当我创建一个数组时,我不知道有多少行。每行代表一个账户,每行有4列:ID、姓名、用户名和密码。

我尝试使用锯齿形数组,但是无法实现上述需求。

int[][] jaggedArray = new int[][3];

我查找了 ArrayList 类的实现以及一些关于泛型的知识。

我正在寻找一种可以方便地操作数据的解决方案,例如:

  • 将元素添加到列表、选择和输入元素
  • 在数据库查询中使用元素
  • 作为其他函数的参数使用

由于我是 .NET (C#) 的新手,请提供代码解决方案,而不是通用解决方案。

3个回答

17

在我看来,由于“columns”是固定的,所以应该声明一个类:

public class Account
{
    public int ID {get;set;}
    public string Name {get;set;}
    public string User {get;set;}
    public string Password {get;set;} // you meant salted hash, right? ;p
}

现在我有一个:

List<Account> list = new List<Account>();

这里有你需要的所有内容:

添加到列表、选择、输入元素

list.Add等等

在数据库查询中使用元素,作为其他函数的参数

如果没有更多信息会比较模糊,但你可以传递Account或单个值,或整个列表。


谢谢。我还有一个问题:如何恢复特定列表项的类成员值? - user848568
2
@user 你的意思是像 list[0].Name 这样吗? - Marc Gravell
我的情况有一个小差异。行和列都是未知的。我如何在“二维数组”中实现相同的结果? - phougatv
1
@barnes 然后... var arr = new YourChosenType[len1, len2]; (可以是 int[,], string[,] 等)- 或者使用类似 DataTable 的东西 - 并且要明确的是:这不是一个“小”的差别。 - Marc Gravell
谢谢:)知道了我的“小事”是“大事”,我只是客气地说了一下;) - phougatv
类似这样的东西会被存储在 Asp.net MVC 程序的模型目录中吗? - eaglei22

2
在.NET中不存在动态长度数组。请使用List<>代替。
当你实例化一个数组时,所有的数组边界都需要被知道。可能会让你感到困惑的是,对于交错数组似乎不同,但实际上并非如此:因为它是一个数组的数组,所以当你实例化它时,它将是一组未实例化的数组(例如null引用)。然后你需要再次分配每个数组才能使用它们。

0
据我所知,我们不能在不知道其大小的情况下实例化数组。你为什么不尝试使用列表数组呢?像这样:

List<int>[] a = new List<int>[yourDesireColumnNumber];

使用列表(List),添加、选择和输入元素很容易。如果您想将其作为参数传递到其他函数中,只需定义类型(Type)即可。


你的意思不是固定整数数组的列表,而是整数列表的固定数组吗? - The Scrum Meister
3
Scrum 是正确的 - 如果你选择这种方法(我不会选择 ;p),那么它应该是一个 List<int[]> 而不是一个 List<int>[] - Marc Gravell
在评判之前,你应该先尝试一下。这是一个整型列表数组。顺便说一句,马克的方法很棒。;) 我从中学到了很多。 - Khoa Le

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接