Jak se spojit dvě pole?

hlasů
1

Jsem v základním programovém třídy, a vše, co se děje v pseudokódu.

Moje otázka zní: Jak se spojit dvě sestavy?

Mám jeden-dimenzionální pole, které uvádí studenty jména, a mám dvojrozměrné pole, která uvádí osm hlavních skóre každého studenta ... to je vše v pořádku a dandy, ale teď musím řadit pole studenty název. Já tropil kolem on-line a pročíst kapitolu knihy dvakrát, ale pouze stručně zmiňuje propojení dvou řad, ale nevykazuje žádné příklady.

Pokud je to k něčemu, jsme pomocí bublina-třídění, a to je to, co jsem docela obeznámen s ... mohu řadit jména, to je ta snadná část, ale já nevím, jak třídit stupňů, takže nemají jdou mimo provoz.

Díky za vstup!

Sidenote: Mám to přišel! Skončil jsem dělat, jak se Greg Hewgill zmínil. Jak jsem dal ve svém komentáři k jeho návrhu, začala jsem náhodně házení řádků kódu, až mi ten nápad udeřil ... to nevypadá pěkně (jeden modul vyměněn jména, další Záměna stupňů, a třetí dokonce pak vyměnit jednotlivé studenty stupně již dříve v multidimenzionální pole), ale je to opravdu zdálo, že funguje ... žádný způsob, jak otestovat v jazyce, jak nemám kompilátor ani jsem dostatek znalostí, aby se pseudo kód do skutečného kódu v případě, byl jsem stáhnout jeden, ale to zní opravdu dobře na papíře jsem napsal to on!

Jak jsem se také zmínil se v poznámce, já děkuji všem za jejich rychlé a užitečné vhled, já vlastně ani nenapadlo, že bych si dnes odpověď, děkuji vám všem ještě jednou za vaši pomoc!

Jeffrey

Položena 02/12/2008 v 09:03
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
0

Váš předpoklad je chybný. Neměli byste mít dvě pole na prvním místě.

Měli byste mít jednu řadu objektů , z nichž každá drží na jméno studenta a jeho výsledky:

public class Record
{
    public string Student;
    public int[] Scores;
} 
Odpovězeno 02/12/2008 v 09:08
zdroj uživatelem

hlasů
1

Co budete chtít udělat, je následující: Jak budete třídění jména a budete muset vyměnit dvě polohy, dělat stejnou výměnu v poli skóre. Tímto způsobem budou všechny změny provedené v poli názvy se odráží v poli skóruje. Až budete hotovi, bude skóre ve stejném seřazeném pořadí, jak jsou názvy.

Existuje více efektivních způsobů, jak to udělat s různými datovými strukturami, jako další připomínky budou zobrazovat.

Odpovězeno 02/12/2008 v 09:12
zdroj uživatelem

hlasů
0

Dva přístupy: za prvé, při třídění jmen, pokaždé, když se vymění dvě jména, výměna řádků (nebo sloupců nebo cokoliv chcete nazývat) partitury ve stejných pozicích. Na konci jsou výsledky by měly být stále v synchronizaci s jmény.

Za druhé, namísto třídění jmen, vytvořit třetí pole, které bude obsahovat indexy do jedné ze dvou dalších polí, zpočátku 0 do n-1, ale pak tříděny, porovnávání název [a] a název [b], místo třídění jména pole sám.

Odpovězeno 02/12/2008 v 09:18
zdroj uživatelem

hlasů
2

Vymezují jednoduchý Student třídu takto:

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
}

pak ještě jednodušší

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

bude dělat práci za vás.

Odpovězeno 02/12/2008 v 09:40
zdroj uživatelem

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