Domanda

Sono in una classe di programmazione di base e tutto è fatto in pseudo codice.

La mia domanda è questa: come si collegano due array?

Ho un array monodimensionale che elenca i nomi degli studenti e ho un array bidimensionale che elenca i primi otto punteggi di ogni studente ... questo è tutto perfetto e dandy, ma ora ho bisogno di ordinare gli array dal nome degli studenti. Sono sfogliato online e letto due volte il capitolo dei libri, menziona solo brevemente il collegamento di due array ma non mostra esempi.

Se è di aiuto, stiamo usando l'ordinamento delle bolle, ed è quello con cui ho abbastanza familiarità ... Posso ordinare i nomi, questa è la parte facile, ma non so come ordinare i voti così non vanno fuori servizio.

Grazie per l'input!

Sidenote: l'ho capito! Ho finito per fare come Greg Hewgill aveva menzionato. Mentre inserivo il mio commento al suo suggerimento, ho iniziato a inserire casualmente righe di codice fino a quando quell'idea non mi ha colpito ... non sembra carino (un modulo ha scambiato i nomi, un altro per scambiare i voti e un terzo anche allora scambiare i voti dei singoli studenti in precedenza in una matrice multidimensionale), ma in effetti sembrava funzionare ... non c'è modo di testarlo in una lingua in quanto non ho compilatore né ho abbastanza conoscenze per trasformare lo pseudo codice in codice reale se Dovevo scaricarne uno, ma suona davvero bene sulla carta su cui l'ho scritto!

Come ho già detto nella nota, ringrazio tutti per la loro comprensione rapida e utile, in realtà non pensavo nemmeno di ricevere una risposta stasera, grazie ancora a tutti per tutto il vostro aiuto!

Jeffrey

È stato utile?

Soluzione

Quello che potresti voler fare è il seguente: mentre stai ordinando i nomi e devi scambiare due posizioni, fai lo stesso scambio nella matrice dei punteggi. In questo modo, tutte le modifiche apportate alla matrice dei nomi verranno riflesse nella matrice dei punteggi. Al termine, i punteggi saranno nello stesso ordine ordinato dei nomi.

Esistono modi più efficaci per farlo con diverse strutture di dati, come mostreranno altri commenti.

Altri suggerimenti

Definisci una semplice classe Student come questa:

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
}

quindi ancora più semplice

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

farà il lavoro per te.

La tua premessa è sbagliata. Non dovresti avere due array in primo luogo.

Dovresti avere una matrice di oggetti , ognuno dei quali detiene il nome di uno studente e i suoi punteggi:

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

Due approcci: in primo luogo, quando si ordinano i nomi, ogni volta che si scambiano due nomi, si scambiano le righe (o colonne o come si desidera chiamarli) dei punteggi nelle stesse posizioni. Alla fine, i punteggi dovrebbero essere ancora sincronizzati con i nomi.

In secondo luogo, invece di ordinare i nomi, crea un terzo array che conterrà gli indici in uno degli altri due array, inizialmente da 0 a n-1, ma poi ordinati, confrontando nome [a] e nome [b], invece di ordinare l'array di nomi stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top