Toon posts:

[C#] Opslaan van Objecten. Hoe???

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dames, Heren,

Ik ben voor mijzelf een simpele game aan het schrijven in C#.
Nu heb ik de afgelopen 2,3 jaar alleen maar met Java gewerkt en ben ik volledig verzot op de HashSet en Set functionaliteit van die taal.

Ik heb namelijk het volgende probleem.

Ik heb een object genaamd "Character"
dit Character object heeft een "x" aantal velden waaronder een "characterID" welke uniek is.

Nu wil ik een Manager schrijven die alle ingelezen "Characters" beheerd en dus centraal bij zich houdt.

In Java deed ik dit met ene HashSet die had namelijk een "id" en een "value"

in het "id" zette ik dan het "characterID" en in de value de gehele "Character"

Dit omdat ik dan makkelijk kon zien of mijn object al bestond.

Nu kan ik wel een "List" gebruiken.
Maar dan moet ik elk "Character" ophalen, en zijn ID opvragen, en dan vergelijken met het nieuw aan te maken "Character".

Dat moet toch efficiënter kunnen.

Ik hoop dat het probleem duidelijk is?

Iemand een handige tip voor me?

  • Marcj
  • Registratie: November 2000
  • Laatst online: 12:49
Bedoel je niet de HashMap uit java? Deze heeft een key => value relatie. Deze bestaat namelijk ook gewoon in het .NET framework: HashTable.

[ Voor 3% gewijzigd door Marcj op 14-02-2007 20:54 ]


Verwijderd

Topicstarter
Ja dat zocht ik inderdaad.

En als ik dan gewoon Collections;
Gebruik inplaats van

Collections.Generic;
dan kent mijn intellisense hem ook gewoon.

<zucht>

Pijnlijk hoe hard je over iets heen kan kijken. :X

Maar toch, bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
In C# 2.0 (die jij gebruikt) heb je ook de generic Dictionary<T, K> class, waarmee je dan dus een strong typed collection hebt. Da's nog handiger dan een Hashtable, want dan hoef je niet de hele tijd te casten als je iets uit je hashtable haalt.
code:
1
2
3
4
5
Dictionary<int, Character> myCharacters = new Dictionary<int, Character>();

myCharacters.Add (1, new Character ( ... ));

Character aCharacter = myCharacters[1];

https://fgheysels.github.io/


Verwijderd

Verwijderd schreef op woensdag 14 februari 2007 @ 20:48:
Dames, Heren,

Ik ben voor mijzelf een simpele game aan het schrijven in C#.
Nu heb ik de afgelopen 2,3 jaar alleen maar met Java gewerkt en ben ik volledig verzot op de HashSet en Set functionaliteit van die taal.

[..]
Hint: zie tevens Iesi.Collections :)

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Ik blijf me eraan irriteren. .NET is echt een heerlijk platform om voor te programmeren, maar op zo'n essentieel punt als het aanbieden van datastructuren laten ze echt een paar flinke steken vallen.
Wat dat betreft is het in Java een stuk beter geregeld.

Gelukkig bestaan de Iesi.Collections (voor .NET 1.1) en de Wintellect PowerCollections (voor .NET 2.0) libraries om dit gat op te vullen, maar toch...

Verwijderd

MrBucket schreef op donderdag 15 februari 2007 @ 21:19:
Ik blijf me eraan irriteren. .NET is echt een heerlijk platform om voor te programmeren, maar op zo'n essentieel punt als het aanbieden van datastructuren laten ze echt een paar flinke steken vallen.
Wat dat betreft is het in Java een stuk beter geregeld.

Gelukkig bestaan de Iesi.Collections (voor .NET 1.1) en de Wintellect PowerCollections (voor .NET 2.0) libraries om dit gat op te vullen, maar toch...
Ehm, wat voor opslagstructuren ontbreken dan volgens jou? Die Wintellect PowerCollections stelt absoluut niets voor bijvoorbeeld...

[ Voor 5% gewijzigd door Verwijderd op 15-02-2007 21:35 ]


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Verwijderd schreef op donderdag 15 februari 2007 @ 21:34:
[...]


Ehm, wat voor opslagstructuren ontbreken dan volgens jou? Die Wintellect PowerCollections stelt absoluut niets voor bijvoorbeeld...
Stelt niets voor? :D
Ben je bekend met de C++ STL? Ongeveer de helft van alles wat de STL wel had.

Dat wil zeggen: Ordered Sets, MultiSets, Maps en Multimaps (allen gebaseerd op een gebalanceerd binaire boom). En dezelfde smaken maar dan gebaseerd op een hashtable. Plus een hele waslijst aan generieke algoritmen (voor permutaties, lexicografische vergelijkingen, custom predicaten etc.).

En ja, je kan alles ook in een ArrayList stoppen, dan heb je geen andere datastructuren nodig. Maar dat zegt dan meer over jouw programmeerstijl dan over het nut van de PowerCollections...

Die PowerCollections library had gewoon standaard in .NET 2.0 moeten zitten.

[ Voor 15% gewijzigd door MrBucket op 15-02-2007 22:00 ]


Verwijderd

MrBucket schreef op donderdag 15 februari 2007 @ 21:53:
[...]

Stelt niets voor? :D
Ben je bekend met de C++ STL? Ongeveer de helft van alles wat de STL wel had.

Dat wil zeggen: Ordered Sets, MultiSets, Maps en Multimaps (allen gebaseerd op een gebalanceerd binaire boom). En dezelfde smaken maar dan gebaseerd op een hashtable. Plus een hele waslijst aan generieke algoritmen (voor permutaties, lexicografische vergelijkingen, custom predicaten etc.).

En ja, je kan alles ook in een ArrayList stoppen, dan heb je geen andere datastructuren nodig. Maar dat zegt dan meer over jouw programmeerstijl dan over het nut van de PowerCollections...

Die PowerCollections library had gewoon standaard in .NET 2.0 moeten zitten.
Ehm .NET heeft veel meer dan een ArrayList. Geordende sets etc... Het is allemaal gewoon beschikbaar hoor?

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Verwijderd schreef op donderdag 15 februari 2007 @ 22:11:
[...]


Ehm .NET heeft veel meer dan een ArrayList. Geordende sets etc... Het is allemaal gewoon beschikbaar hoor?
Als ik kijk op de MSDN-pagina voor SortedList, dan zie ik 1 keer de vermelding staan dat het om een "binary tree" zou gaan.

Echter, vervolgens hebben ze het over O(n) lookup time en een "internal array", wat doet vermoeden dat men bij nader inzien toch maar geen gebalanceerd binaire boom heeft geimplementeerd.

Verwijderd

MrBucket schreef op donderdag 15 februari 2007 @ 22:25:
[...]

Als ik kijk op de MSDN-pagina voor SortedList, dan zie ik 1 keer de vermelding staan dat het om een "binary tree" zou gaan.

Echter, vervolgens hebben ze het over O(n) lookup time en een "internal array", wat doet vermoeden dat men bij nader inzien toch maar geen gebalanceerd binaire boom heeft geimplementeerd.
Your point being dat je een purist bent? Want het is dus gewoon beschikbaar, misschien niet in de variant die jij graag wil, maar dat is dus een compleet ander verhaal!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Verwijderd schreef op donderdag 15 februari 2007 @ 22:40:
[...]


Your point being dat je een purist bent? Want het is dus gewoon beschikbaar, misschien niet in de variant die jij graag wil, maar dat is dus een compleet ander verhaal!
M.a.w.: een gesorteerde lijst is een gesorteerde lijst, of die nu geimplementeerd is als een array of als een binaire boom? En de rest is purisme?

Daar kom je achter als je zo'n SortedList wil vullen met 10000 ongesorteerde elementen.
Hint: O(n) insertion time ipv O(log n). Deleten idem.

Verwijderd

MrBucket schreef op donderdag 15 februari 2007 @ 22:47:
[...]

M.a.w.: een gesorteerde lijst is een gesorteerde lijst, of die nu geimplementeerd is als een array of als een binaire boom? En de rest is purisme?

Daar kom je achter als je zo'n SortedList wil vullen met 10000 ongesorteerde elementen.
Hint: O(n) insertion time ipv O(log n). Deleten idem.
In een goede applicatie vul je een lijst uberhaubt niet ineens met 10000 objecten, maar dat ter zijde. Daar heb je daarnaast hele andere structuren en methodes voor. Die ga ik hier overigens niet met je discuseren, alhoewel het wel een leuke discussie is, maar dan gaan we erg off topic :P

[ Voor 14% gewijzigd door Verwijderd op 15-02-2007 23:05 ]


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 13:24
MrBucket schreef op donderdag 15 februari 2007 @ 22:47:
[...]

M.a.w.: een gesorteerde lijst is een gesorteerde lijst, of die nu geimplementeerd is als een array of als een binaire boom? En de rest is purisme?

Daar kom je achter als je zo'n SortedList wil vullen met 10000 ongesorteerde elementen.
Hint: O(n) insertion time ipv O(log n). Deleten idem.
Één ding, ze hebben het over een 'binary search tree', dat 'ie balanced is bedenk je er zelf bij. Als ik de documentatie lees verlopen zoekoperaties in O(log N) tijd, dat impliceert op zich wel dat de tree balanced is, anders kun je die performance nooit halen. Als je gewoon bij insertion en deletion je elementen op volgorde houdt, dan kan het zoeken wel in O(log N) tijd gebeuren.

Waarschijnlijk voegt Add() het element op de juiste plaats in, daarbij alle elementen opschuivend die groter zijn. Kijk maar eens naar de omschrijving:
This method is an O(n) operation for unsorted data, where n is Count. It is an O(log n) operation if the new element is added at the end of the list. If insertion causes a resize, the operation is O(n).
Aan het eind van de array hoeven er geen verschuivingen plaats te vinden, dus is de snelheid O(log N).

Verder: binary search trees zijn ook te implementeren als array, het één sluit het ander niet uit :).
Verwijderd schreef op donderdag 15 februari 2007 @ 23:03:
[...]


In een goede applicatie vul je een lijst uberhaubt niet ineens met 10000 objecten, maar dat ter zijde. Daar heb je daarnaast hele andere structuren en methodes voor. Die ga ik hier overigens niet met je discuseren, alhoewel het wel een leuke discussie is, maar dan gaan we erg off topic :P
Huh, waarom zou je een (gesorteerde) lijst niet gebruiken om grote hoeveelheden data in op te slaan? :?

[ Voor 15% gewijzigd door Jaap-Jan op 15-02-2007 23:18 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Verwijderd

Jaap-Jan schreef op donderdag 15 februari 2007 @ 23:14:
[...]

Huh, waarom zou je een (gesorteerde) lijst niet gebruiken om grote hoeveelheden data in op te slaan? :?
Ik heb het meer over het feit dat je in 1x zoveel data gebruikt. Dan doe je iets niet helemaal slim, daar kun je wel wat in optimaliseren ;) 10000 objecten in je memory wordt je uberhaubt gewoon niet blij van, ongeacht optimalisatie...

[ Voor 11% gewijzigd door Verwijderd op 15-02-2007 23:51 ]

Pagina: 1