Как вы связываете два массива?

Я нахожусь в базовом классе программирования, и все сделано в псевдокоде.

У меня такой вопрос: как вы связываете два массива?

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

Если это поможет, мы используем пузырьковую сортировку, и это то, с чем я довольно хорошо знаком... Я могу сортировать имена, это простая часть, но я не знаю, как сортировать оценки, чтобы они не делали выйти из строя.

Спасибо за вклад!

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] вместо сортировки сам массив имен.

Другие вопросы по тегам