遍历列表并将值添加到二维数组中

3
我的问题是我不知道如何遍历我的列表并将某些属性分配给现有的2D数组。
我有一个包含50门课程的列表。
List<Course> Courses;   

...并且是相同大小的数组(抱歉,我知道逻辑很差,但这些不是我的实际列表名称,我只需要它们大小相同)。

object[,] enrolledStudents = new object [50, 2];

我的理解是,我将能够向此数组添加每个选择的课程属性50次。不过也许我需要一个大小为[50, 50]的数组?

无论如何,当这只是一个对象数组时,我没有问题循环遍历课程列表,并像下面这样添加所需的属性。

    int i = 0;
    foreach (var a in Courses)
    {
        enrolledStudents[i] = a.CourseName;
        i++;
    }

这个代码填充了一个一维数组,包含50个课程名称,但现在我想要将及格分数也添加到数组中。

所以理想情况下,我的二维数组应该是这样的:

{ y = CourseName, val = PassMark }
{ y = CourseName, val = PassMark }
{ y = CourseName, val = PassMark }
{ y = CourseName, val = PassMark }
...

与此同时,我会继续谷歌搜索,因为这似乎是一个如此基本的问题,我应该知道答案。

2个回答

4
int i = 0;
foreach (var a in Courses)
{
    enrolledStudents[i, 0] = a.CourseName;
    enrolledStudents[i, 1] = a.PassMark;
    i++;
}

这应该是有效的。您需要将数组设置为50x2(50门课程,每门课程都有一个名称和及格分数),因此[50, 2]是正确的。如果您愿意,也可以交换数字并使用[2, 50],这取决于您的喜好。但请注意,您还需要将[i,0]更改为[0,i]。


谢谢您的回复。现在看起来很明显了。您知道我是否可以将它们分别命名为y和val,以便稍后在我的代码中调用它们吗? - bjjrolls
@bjjrolls 你能详细说明一下吗?我不确定你想给y和val取什么名字,以及你希望在代码中以何种方式调用它们。 - Memfisto
就像这个fiddle http://jsfiddle.net/JVNjs/735/我希望我的数据以那种格式呈现。 - bjjrolls
@bjjrolls 不确定您是否可以使用数组完成此类操作。它们仅使用索引。如果您将方法更改为类似于字典的东西,那么您将拥有大致相同的结构,因为您不会使用索引来访问它们,而是使用键/值,您可以使用变量名称“y”和“val”将值传递给键或值。 - Memfisto

2

这是Memfisto答案的简短版:

List<Course> Courses = new List<Course>();
string[][] enrolledStudents = new string[50][];
// Create a jagged array so we can change each item like this [i] instead of
// having to go through both indexes like this [x, y].

Courses.Select((a, i) => enrolledStudents[i] = new string[] { a.AccountName, a.PassMark });

这里使用了一个重载的Enumerable.Select方法,它允许使用索引。


谢谢,这很优雅,我迄今为止还没有看到过这样的做法。 - bjjrolls
使用Select时,是不是更好使用锯齿数组,还是这只是你的个人偏好?感谢提供更简洁的版本! - Memfisto
不规则数组最好使用Select,因为它们更容易处理。此外,您可以像这样获取项目[int],而不必拥有两个索引。而多维数组需要两个索引[int, int] - user6438653

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