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

голоса
1

Я в базовом классе программирования, и все это делается в псевдокоде.

Мой вопрос заключается в следующем: Как вы связать два массива?

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

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

Спасибо за вход!

Sidenote: я разобрался! Я закончил тем, что делал, как уже упоминалось Грег Hewgill. Как я положил на мой комментарий к его предложению, я начал беспорядочно бросать в строках кода, пока эта идея не ударил меня ... это не выглядит довольно (один модуль поменялись имена, другой, чтобы поменять сорта, и третий, даже тогда поменять местами отдельные студенты классов ранее в многомерном массиве), но на самом деле, похоже, не работает ... нет способа проверить это на языке, как у меня нет компилятора ни у меня достаточно знаний, чтобы сделать псевдокод в реальный код, если Я был скачать один, но это звучит очень хорошо на бумаге, я напечатал это на!

Как я уже упоминал в записке, я благодарю всех за их быстрое и полезное понимание, я на самом деле даже не думаю, что я бы получить ответ сегодня, спасибо всем еще раз за вашу помощь!

Джеффри

Задан 02/12/2008 в 09:03
источник пользователем
На других языках...                            


4 ответов

голоса
0

Ваша посылка неверна. Вы не должны иметь два массива в первую очередь.

Вы должны иметь один массив объектов , каждый из которых содержит имя студента и его результаты:

public class Record
{
    public string Student;
    public int[] Scores;
} 
Ответил 02/12/2008 в 09:08
источник пользователем

голоса
1

Что вы можете сделать , это следующее: Как вы сортировки имен , и вы должны поменять местами две позиции, сделать же своп в массиве баллов. Таким образом, все изменения, внесенные в массив имен будут отражены в массиве баллов. Когда вы закончите, баллы будут в том же порядке сортировки , как имена.

Есть более эффективные способы сделать это с различными структурами данных, как и другие комментарии будут показывать.

Ответил 02/12/2008 в 09:12
источник пользователем

голоса
0

Два подхода: во-первых, при сортировке имен, каждый раз, когда вы обмениваетесь два имени, обменивающиеся строк (или столбцов или что вы хотите назвать их) баллов в одних и тех же позиций. В конце концов, баллы все равно должны быть синхронизированы с именами.

Во-вторых, вместо того, чтобы сортировать имена, создать третий массив, который будет содержать индексы в любой из двух других массивов, первоначально от 0 до N-1, но затем сортируются, сравнивая имя [а] и название [б], вместо того, чтобы сортировать наименования сам массив.

Ответил 02/12/2008 в 09:18
источник пользователем

голоса
2

Определим простой класс 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);

будет делать работу за вас.

Ответил 02/12/2008 в 09:40
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more