Avatar billede zappa Nybegynder
05. maj 2009 - 17:46 Der er 7 kommentarer og
1 løsning

Indeksering af generisk List<>

Hej

Jeg vil gerne indeksere ind i generisk List. For eksempel:

List<CustomObj> L = new List<CustomObj>();
Fyld i L...

Og derefter skrive:
List[i].DoSomeThing();

Det virker fint med i af typen int, men jeg gerne vil bruge i af typen long og det kan ikke lade sig gøre.

Er der nogen en omvej, som ikke løber hele listen igennem?

Vh. Zappa
Avatar billede erikjacobsen Ekspert
05. maj 2009 - 18:38 #1
Må jeg spørge hvorfor? Har du mere end 2 milliarder elementer i listen?
Avatar billede arne_v Ekspert
05. maj 2009 - 18:47 #2
Du kan caste din long til int.

Man kan ikke have mere end ca. 250 millioner elementer i en List<> (paa 64 bit CLR vil 250 millioner referencer i backing arrayet fylde max. stoerrelse for et CLR objekt).

Hvis du har mange huller i listen, saa kan du bruge Dictionary<Long,CustomObj>.
Avatar billede zappa Nybegynder
05. maj 2009 - 18:51 #3
Hej Erik

Nej, der er ikke mere end to milliarder i listen, men datastrukturen bruger milisekunder som indeks i listen, og efter cirka 26 dage er antal milisekunder så højt at det overstiger maksimum for int32.

Indeks findes ud fra differencen mellem to datoer i milisekunder.

Vh. Zappa
Avatar billede arne_v Ekspert
05. maj 2009 - 19:20 #4
Dictionary<Long,CustomObj>
Avatar billede bitmatic Nybegynder
05. maj 2009 - 22:23 #5
Helt enig med arne. Problemet er, at List<> ikke er den rigtige container til at dække dit behov.

Nu kender jeg ikke dit helt specifikke behov, men hvis ikke Dictionary virker for dig, så prøv eventuelt at kigge på Hashtable.
Avatar billede arne_v Ekspert
04. juli 2009 - 04:38 #6
zappa ?
Avatar billede zappa Nybegynder
04. juli 2009 - 19:22 #7
Mange tak for alle svarene.
Beklager at jeg ikke har svarer før nu.

Løsningen blev at dividere millisekunderne med et tilpas stort tal. Jeg ville gerne bruge en anden data struktur (f.eks. Dictionary<Long, Object>) men det ville kræve for meget tid.

Jeg vil gerne uddele til dem der har brugt tid på spørgsmålet.
Avatar billede arne_v Ekspert
04. juli 2009 - 23:43 #8
svar fra mig
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