2008-12-02 4 views
1

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

Вопрос: Как вы связываете два массива?

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

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

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

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

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

Jeffrey

+0

Jeff: Добро пожаловать в stackoverflow! Пожалуйста, поддержите ответы, которые были полезны, и примите (с галочкой) один из ответов. :) – 2008-12-02 08:50:03

+0

На самом деле вам не нужен компилятор. Перейдите на язык, который имеет интерпретатор, такой как Python, Ruby, SML, ... – boutta 2008-12-02 09:12:39

+0

Pseudocode? Нет компилятора? Дийкстра был бы вне себя от радости ... – Artelius 2009-11-06 22:38:30

ответ

1

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

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

0

Ваша посылка неправильная. Во-первых, у вас не должно быть двух массивов.

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

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

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

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

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

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

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