Как вы связываете два массива?
Я нахожусь в базовом классе программирования, и все сделано в псевдокоде.
У меня такой вопрос: как вы связываете два массива?
У меня есть одномерный массив, в котором перечислены имена учеников, и у меня есть двумерный массив, в котором перечислены восемь лучших результатов каждого учащегося... это все хорошо и здорово, но теперь мне нужно отсортировать массивы по ученикам название. Я слоняюсь по интернету и дважды читаю главу с книгами, в ней лишь кратко упоминается о связывании двух массивов, но не приводятся примеры.
Если это поможет, мы используем пузырьковую сортировку, и это то, с чем я довольно хорошо знаком... Я могу сортировать имена, это простая часть, но я не знаю, как сортировать оценки, чтобы они не делали выйти из строя.
Спасибо за вклад!
Sidenote: Я понял это! Я закончил тем, что делал, как упомянул Грег Хьюгилл. Когда я добавил свой комментарий к его предложению, я начал случайным образом добавлять строки кода, пока эта идея не поразила меня... это не выглядит красиво (один модуль поменял местами другой, другой поменял оценки, а третий даже тогда поменять оценки отдельных учеников ранее в многомерном массиве), но это действительно сработало... нет способа проверить это на языке, так как у меня нет компилятора и нет достаточных знаний, чтобы превратить псевдокод в реальный код, если Я должен был загрузить один, но это звучит очень хорошо на бумаге, на которой я напечатал это!
Как я также упоминал в записке, я благодарю всех за их быстрое и полезное понимание, я даже не думал, что получу ответ сегодня вечером, еще раз спасибо всем за вашу помощь!
Джеффри
4 ответа
Возможно, вам захочется сделать следующее: сортируя имена, и вам нужно поменять местами две позиции, выполните тот же обмен в массиве баллов. Таким образом, все изменения, внесенные в массив имен, будут отражены в массиве показателей. Когда вы закончите, результаты будут в том же порядке, что и имена.
Как показывают другие комментарии, существуют более эффективные способы сделать это с различными структурами данных.
Определите простой класс Student следующим образом:
public class Student : IComparable<Student>
{
public string Name { get; set; }
public int[] Scores { get; set; }
#region IComparable<Student> Members
public int CompareTo(Student other)
{
// Assume Name cannot be null
return this.Name.CompareTo(other.Name);
}
#endregion
}
тогда еще проще
var students = new[] {
new Student(){ Name = "B", Scores = new [] { 1,2,3 } },
new Student(){ Name = "C", Scores = new [] { 3,4,5 } },
new Student(){ Name = "A", Scores = new [] { 5,6,7 } }
};
Array.Sort(students);
сделаю работу за вас.
Ваша предпосылка неверна. Вы не должны иметь два массива в первую очередь.
У вас должен быть один массив объектов, каждый из которых содержит имя студента и его оценки:
public class Record
{
public string Student;
public int[] Scores;
}
Два подхода: во-первых, при сортировке имен, каждый раз, когда вы обмениваетесь двумя именами, меняйте строки (или столбцы, или как вы хотите их называть) партитур на одинаковые позиции. В конце счета все равно должны быть синхронизированы с именами.
Во-вторых, вместо сортировки имен, создайте третий массив, который будет содержать индексы в любом из двух других массивов, сначала от 0 до n-1, но затем отсортирован, сравнивая name[a] и name[b] вместо сортировки сам массив имен.