Как вы связываете два массива? - PullRequest
1 голос
/ 02 декабря 2008

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

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

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

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

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

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

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

Jeffrey

Ответы [ 4 ]

2 голосов
/ 02 декабря 2008

Определите простой класс ученика следующим образом:

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);

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

1 голос
/ 02 декабря 2008

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

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

0 голосов
/ 02 декабря 2008

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

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

0 голосов
/ 02 декабря 2008

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

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

public class Record
{
    public string Student;
    public int[] Scores;
} 
...