Avatar billede dr1zz Nybegynder
27. november 2007 - 13:14 Der er 11 kommentarer og
1 løsning

Jagged array kopiering

Jeg har lavet en kort test kode for at illustrere mit problem:

int[][] j = new int[2][];
j[0] = new int[] { 0 };

int[][] k = (int[][])j.Clone();

k[0][0] = 1;

Console.WriteLine("j: "+j[0][0].ToString());
Console.WriteLine("k: " + k[0][0].ToString());

j og k er begge 1, selvom j burde være 0 efter min overbevisning.

Det jeg gerne vil have i eksemplet, er en komplet kopi af det jagged array j, men uanset om jeg bruger Clone,CopyTo eller Array.Copy, ændres de ting jeg gør ved kopien også i det oprindelige array.

Hvad gør jeg galt?
Avatar billede neoman Novice
27. november 2007 - 13:20 #1
Se indlægget
re: Arrays: Copy vs. Clone  8/1/2007 3:58 AM  ipsi

i http://geekswithblogs.net/dforhan/archive/2005/12/01/61852.aspx
Avatar billede dr1zz Nybegynder
27. november 2007 - 13:25 #2
Det indlæg illustrere meget præcist hvordan det burde virke, og eftersom jeg netop bruger Clone i mit eksempel, burde det også virke så vidt jeg kan forstå.
Avatar billede dr1zz Nybegynder
27. november 2007 - 13:31 #3
Ah jeg havde lige misset den kommentar du refererede til, min fejl :)

Der er desværre ingen løsning til det :/
Avatar billede neoman Novice
27. november 2007 - 13:38 #4
Du skal tydeligvis lave en "deep copy" - lidt læsning her: http://www.thescripts.com/forum/thread269691.html

Så vidt jeg kan se enten laver man en eller anden copy-ting selv, eller kopierer man arrayet's indhold one by one.

Vent på at de rigtige C#-eksperter vågner op og kigger på dit spørgsmål - kan være de har et fif:)
Avatar billede dr1zz Nybegynder
27. november 2007 - 13:44 #5
Hehe ok jeg venter så :)

Før brugte jeg et multi-dimensional array, der fungerede clone fint. Jeg skiftede over til et jagged array da mit program er meget performance krævende, og jeg havde forstået at et jagged array  skulle være mere effektivt end et multi-dimensional array.

Men hvis jeg skal til at kopiere hvert element over kan det næppe være særligt effektivt mere (jeg kopierer mit jagged/multidimension array ca 200.000 gange hvert 2-3. sec)
Avatar billede neoman Novice
27. november 2007 - 13:58 #6
Hmm - sådan helt på det basale plan kan ikke helt se hvordan du kan undgå det: enten opererer du på referencer, og så har du en shallow copy, eller du har en deep copy, som som medfører en brutal or arbejdskrævende adskillelse fra sin siamesiske tvilling, ved at værdierne kopieres på en eller anden facon.

Men nu overlader jeg arenaen til dem som ved hvad de snakker om :)
Avatar billede arne_v Ekspert
27. november 2007 - 14:12 #7
j er et array af to int[]

Clone laver et nyt array med de samme to int[]
Avatar billede dr1zz Nybegynder
27. november 2007 - 14:15 #8
Der er ingen nem måde at lave en "deep copy" så?
Avatar billede arne_v Ekspert
27. november 2007 - 15:14 #9
en loop og clone

den her operation er nemmere med et 2D array
Avatar billede dr1zz Nybegynder
19. januar 2008 - 19:54 #10
Vil gerne give dig en chance for at svare Arne, jeg endte med at lave det om til et 2D array :)
Avatar billede arne_v Ekspert
19. januar 2008 - 20:21 #11
OK

men neoman var jo også med
Avatar billede dr1zz Nybegynder
19. januar 2008 - 20:41 #12
Sandt nok, venter lige ~24 timer for at give ham en chance for at svare også.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester