[C#] Collections & Capacity*

Pagina: 1
Acties:

  • labee
  • Registratie: November 2002
  • Laatst online: 10-09-2022
Hoi,

Ik heb de volgende regel code:
code:
1
  List<DateTime> resultList = new List<DateTime>(5);

maar helaas werkt dat niet want de lengte van de list blijft 0.

Iemand een idee hoe ik de List bij het aanmaken een juiste lengte kan meegeven.
Ik weet dat met Add je elke keer een item toevoegd maar om meteen de lengte goed te zetten is wel zo netjes als je die toch al weet.

Thx.

[ Voor 5% gewijzigd door labee op 09-05-2006 22:24 ]

http://www.labee.nl


Verwijderd

Collections zijn altijd dynamisch, dus je kan geen vaste grootte opgeven.
Wellicht gewoon een array gebruiken?

DateTime[] resultlist = new DateTime[] {datum1, datum2, datum3 };

Verwijderd

Verwijderd schreef op dinsdag 09 mei 2006 @ 22:34:
Collections zijn altijd dynamisch, dus je kan geen vaste grootte opgeven.
Wellicht gewoon een array gebruiken?

DateTime[] resultlist = new DateTime[] {datum1, datum2, datum3 };
Geen vaste grootte, maar wel een initiële grootte, om te voorkomen dat er onnodig gegoocheld moet worden. Als je weet dat een List meestal zo'n 5 waarden bevat, is het natuurlijk geen punt om daarmee een piepkleinbeetje te optimaliseren.

Bij het assignen van die List worden er nog geen waarden in de List gezet. Er wordt alleen rekening gehouden met het feit dat er ongeveer 5 waarden in gezet gaan worden. Of dat ook daadwerkelijk gebeurt is aan de rest van je applicatie.

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Het is idd zowel uit oogpunt van performance als netheid beter om het op te geven. Performance omdat dan vast wat geheugenplekjes ofzo gereserveerd worden. Dit boeit in 9 van de 10 gevallen niks maar goed, alles is meegenomen. Uit oogpunt van netheid is het ook goed, want dan heb je bij de constructor al een idee hoe groot de collection is. Je hebt iig een indicatie. Gewoon altijd doen dus.

Mbt. jou vraag, die heeft Cheatah wel goed beantwoord denk ik. Het komt er op neer, als je de grootte per-sé nodig hebt na aanroepen van de constructor, je gewoon geen collection moet gebruiken, want de belangrijkste gedachte achter die collections is de dynamische grootte.

Ps. Ik ben een Java-er, dus misschien klopt het niet letterlijk. Het idee wel denk ik. :)

Fat Pizza's pizza, they are big and they are cheezy


  • labee
  • Registratie: November 2002
  • Laatst online: 10-09-2022
Dit staat er in de ms-help

List ()
Initializes a new instance of the List class that is empty and has the default initial capacity.
Supported by the .NET Compact Framework.

List (Generic IEnumerable)
Initializes a new instance of the List class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied.
Supported by the .NET Compact Framework.

List (Int32)
Initializes a new instance of the List class that is empty and has the specified initial capacity.
Supported by the .NET Compact Framework.


Maar als ik jullie opmerkingen goed gebruik moet ik toch gewoon een Add gebruiken om de waarde in de list te zetten..??..

[ Voor 8% gewijzigd door labee op 09-05-2006 23:10 ]

http://www.labee.nl


Verwijderd

labee schreef op dinsdag 09 mei 2006 @ 23:09:

List (Int32)
Initializes a new instance of the List class that is empty and has the specified initial capacity.

Maar als ik jullie opmerkingen goed gebruik moet ik toch gewoon een Add gebruiken om de waarde in de list te zetten..??..
Dat klopt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:46
Dit staat idd gewoon in de help. De capacity is de hoeveelheid items je collection kan bevatten. Als de grens bereikt wordt, dan wordt je capacity uitgebreid met een aantal dat afhankelijk is van je capacity.
Zolang er niets in de collectie zit, is de collectie leeg, en returned count dus 0.

Als je een idee hebt hoeveel items je collectie gaat bevatten, is het een goed idee om de initial capacity te bepalen; op die manier zal je minder overhead hebben als de lijst moet groeien.

https://fgheysels.github.io/

Pagina: 1