Hej Istället för att använda en 2-dimmad sak så kan du använda en 1-dimmas sak istället... Lär knappast hjälpa mycket Det beror nog på situationen också, någon gång skall ju x * LängdPåArrayen + y göras ändå ifall man använder t.ex. en loop... Precis, och jag glömde skriva det. Det är nästan alltid bäst att låta kompilatorn göra det som den har möjlighet att göra. Det lönar sig sällan att ta jobbet ifrån kompilatorn, om kompilatorn lika gärna kunnat göra samma sak. Så att optimera genom att behandla 2-dimensionella arrayer som 1-dimensionella det tror jag sällan eller aldrig kommer att lyckas. Den som skriver en kompilator som inte effektivt tar hand om arrayer kommer aldrig att få framgång :-) Hm... aja, du vinner! ;) Det är SvenPon som lyckats övertala mig... :) Nja, en grej kan snabbas upp... en ren loop genom hela "matrisen" kan gå fortare. Och det är förmodligen rätt svårt att se för en kompilator att man försöker göra när man kör med två variabler. Hej OBS! >Tänk på att en struct i en array blir ett objekt. Funderade på en sak... Kan man inte lagra integer-sakerna i strängen? Så att varje integer blir 4 tecken i strängen... Låter som onödigt jobb att omvandla åt det hållet. Kan man inte ha färgen som heltal istället om man nu ska ha allt av samma typ.Multidimensionell Array
Skall implementera en tvådimensionell array där varje "cell" skall innehålla 3 integer värden + ett Color värde lagrat som sträng.
Performance är betydelsefullt. Finns det något bättre sätt än att använda en struct?
Mvh
/B#Sv: Multidimensionell Array
Sv: Multidimensionell Array
Om du använder en endimensionell array som datastruktur för ovanstående problem så måste du adressera elementen enligt följande :
<code>
// första posten
int base=0;
array[base]
array[base+1]
array[base+2]
array[base+3]
// nästa post
base+=4;
array[base]
array[base+1]
array[base+2]
array[base+3]
// ... o s v
</code>
När du adresserar en tvådimensionell array så sköter kompilatorn detta själv och jag skulle tro att du inte tjänat ett dugg på detta, snarare förlorar eftersom base++ är snabbare än base+=4.
<code>
// första posten adresseras :
int base=0;
array[base,0]
array[base,1]
array[base,2]
array[base,3]
// nästa post
base++;
array[base,0]
array[base,1]
array[base,2]
array[base,3]
// ... o s v
</code>Sv: Multidimensionell Array
Sv: Multidimensionell Array
Sv: Multidimensionell Array
Sv: Multidimensionell Array
Sv: Multidimensionell Array
Tack för synpunkter, jag går nog på tvådimensionell med en struct. Kommer dock att testa olika varianter. Återkommer i ämnet.
Mvh
/B#Sv: Multidimensionell Array
Tänk på att en struct i en array blir ett objekt. Du gör en ottrevlig casting som kan ge sämre prestanda än om du skulle köra med en class.
Bara en parantes.
//Johan NSv: Multidimensionell Array
Beror på vilken typ av array du har. Är det en array av System.Object eller System.ValueType, så ja. Men är den en array av struct typen själv så krävs ingen boxing.
MSSv: Multidimensionell Array
Sv: Multidimensionell Array