Archief - [PROG][VB.net] Arrays

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

scipicore

Legacy Member
ik ben bezig met een programma en ik heb enkele ééndimensionale arrays (+/- 9). nu is mijn probleem dat ik een van de arrays moet ordenen (waarden zijn getallen, zou van hoogste naar laagste moeten gaan). dat op zich is geen probleem, het probleem zit hem er namelijk in dat de andere arrays zouden moeten 'volgen'. het zit dus zo: array1(0) hoort bij array2(0) en array1(1) hoort bij array2(1). moest ik nu meerdimensionale arrays kunnen sorteren zou het gaan maar dat kan spijtig genoeg niet (of ik moet er een procedure van enkele pagina's voor schrijven). in array1 zitten bijvoorbeeld de volgende waarden: 5,6,1,8. ik wil dus dat die gesorteerd word naar 8,6,5,1 maar de anderen zouden moeten volgen. ik hoop dat ik het een beetje duidelijk heb kunnen uitleggen :x moesten er nog vragen zijn, stel ze gerust :)

cG`

Legacy Member
Ik weet niet of ik het goed begrepen heb, maar ik denk dat je dit wil bekomen:
Array 1 = 1, 6, 5, 8
Array 2 = 4, 3, 8, 9
Array 3 = 2, 8, 7, 1

Je sorteert array 1: 1, 5, 6, 8
en array 2 moet dan worden: 4, 8, 3, 9
en array 3: 2, 7, 8, 1 ?

Je zou toch bij elke swap die je doet in Array 1 een procedure kunnen oproepen waaraan je de 2 indexen (i, j) van de geswapte items meegeeft. In deze procedure swap je dan in alle andere arrays ook de items i, j. Je kan dan als parameter eventueel een pointer ofzo naar de array die je aan het sorteren bent meegeven zodat je aan deze array niets meer verandert.

Als ik het verkeerd begrepen heb zal je aan mijn uitleg niet veel hebben natuurlijk :)

scipicore

Legacy Member
het is idd goed begrepen ^^ zal het vanavond eens onderzoeken :)

Obliv`

Legacy Member
Je kan toch arrays sorteren op basis van de sorteervolgorde in een andere array.

scipicore

Legacy Member
ja? hoe dan?
*edit* heb wat gezocht en heb dit gevonden:

array.sort(array1,array2)

probleem is nu dat ik er zo maar 2 kan sorteren, terwijl ik er 9 moet sorteren ^^

cG`

Legacy Member
Mja ik ken geen visual basic dus van ingebouwde functies daar weet ik niets :)

Deadly-By-Sight

Legacy Member
En de reden waarom je geen multidimensionele tabel gebruikt is ... ?

scipicore

Legacy Member
omdat ik die niet kan ordenen..... (iig tog niet met array.sort(naam), een andere manier ken ik dan ook niet direct)

QplQyer

Legacy Member
Scip zei:
ja? hoe dan?
*edit* heb wat gezocht en heb dit gevonden:

array.sort(array1,array2)

probleem is nu dat ik er zo maar 2 kan sorteren, terwijl ik er 9 moet sorteren ^^
Gooi al je arrays in 1 array, sorteer die array en knip hem dan weer in stukken?
Nu niet het meest geheugenefficiënt, maar goed.

Een variant op merge-sort die de array.sort als basis-sorteermethode gebruikt en een merge doet door de arrays af te lopen en op juiste plaatsen in te voegen werkt allicht ook.

.:KrusT:.

Legacy Member
Je kan zelf een sorteermechanisme schrijven, vb een bubblesort of quicksort, die ook met de indexen van de andere arrays aanpast. Wat wel belangrijk is dat al uw arrays evenveel items hebben.

vb met bubblesort en 3 arrays (1 om te sorteren, 2 die volgen), wel in C#, aangezien ik geen vb.net gebruik.

Code:
void MyBubbleSort(ref int[] toSort, ref int[] toFollow1, ref int[] toFollow2)
{
    int temp;
    for (int pos = toSort.Length - 1; pos >= 0; pos--)
    {
        for (int check = 0; check <= pos - 1; check++)
        {
        if (toSort[check] > toSort[check + 1])
        {
            temp = toSort[check];
            toSort[check] = toSort[check + 1];
            toSort[check + 1] = temp;
            // Volgorde in andere arrays ook aanpassen
            temp = toFollow1[check];
            toFollow1[check] = toFollow1[check + 1];
            toFollow1[check + 1] = temp;
            temp = toFollow2[check];
            toFollow2[check] = toFollow2[check + 1];
            toFollow2[check + 1] = temp;   
        }
        }
    }
}

Misschien dat ge die "ref int[] toFollow1, ref int[] toFollow2" kunt veranderen in een params array, maar aangezien ik hier geen C# heb kan ik het niet testen.

Edit: let er ook wel op dat een bubblesort niet efficient is voor grote lijsten.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan