3

Моя проблема заключается в том, что я не могу понять, как выполнять итерацию в моем списке и назначать определенные свойства существующему 2D-массиву.Итерация через список и добавление значений в 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++; 
    } 

Это заселенное мой (тогда 1 мерных) массива с 50 CourseNames, но теперь я хотите иметь возможность добавлять патч в массив.

Так в идеале я хочу, чтобы мой (теперь 2 мерный) массив выглядеть

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

Я буду держать в прибегая к помощи тем, так как это кажется такими основными проблемами, которую я должен знать ответ.

ответ

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].

+0

Благодарим вас за это. Кажется, сейчас так очевидно. Знаете ли вы, как я могу назвать их y и val соответственно, чтобы называть их позже в моем коде? – bjjrolls

+0

@bjjrolls Можете ли вы немного уточнить это? Я не уверен, что вы хотите назвать y и val, и каким образом вы хотите называть их позже в коде. – Memfisto

+0

Как в этой скрипке http://jsfiddle.net/JVNjs/735/ Я хочу, чтобы мои данные были в этом формате – bjjrolls

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 который позволяет индексу.

+0

Спасибо, это изящно, я этого не видел до сих пор. – bjjrolls

+0

Являются ли обработанные массивы лучше использовать с помощью Select или это только ваши предпочтения? Спасибо за более короткую версию! – Memfisto

+0

Ячеечные массивы лучше используют Select, потому что их легче работать. Также вы можете получить такой элемент, как этот '[int]', вам не обязательно иметь оба индекса. В то время как массивы mulidimentional требуют как индексов '[int, int]'. –

Смежные вопросы