[c#] Optellen van strings in array

Pagina: 1
Acties:
  • 335 views sinds 30-01-2008
  • Reageer

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
het volgende, ik heb een logfile, waarin o.a. wordt bijgehouden per regel, in welke unit de logregel zich voordoet.

UnitA
UnitB
UnitA
UnitC
UnitA
UnitB

etc...

wat ik uiteindelijk wil weten is, hoe vaak elke unit is voorgekomen
UnitA 16
UnitB 17
UnitC 5

Wat is de meest efficiente methode om dit in c# te doen ? Zijn er hiervoor misschien al standaardmethode's voor ? Is een hashtable een goede optie ?

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Mijn eerste idee: gooi de strings in een arraylist, loop door je arraylist heen met een foreach en increment een tellertje door gebruik te maken van een switch.
Het plaatsen in een ArrayList is misschien ook niet eens nodig, want als je elke regel apart inleest kun je die meteen verwerken (lees: tellen) en verder gaan met de volgende regel.

Een hashtable is mijns inziens overkill omdat je geen ID hoeft te koppelen aan de strings.

My personal website


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Kleine toevoeging:

In mijn voorbeeld gebruikt ik maar 3 units ter voorbeeld, maar in werkelijkheid zijn het misschien 100 units, waardoor 100 tellertjes dmv een switch statement afvallen.
Ik weet trouwens ook niet van te voren welke units er in de logfile staan

[ Voor 5% gewijzigd door Tinuske op 10-03-2005 10:05 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:47
In dat geval zou ik wel voor een hashtable opteren, op die manier kan je direct je juiste teller gaan ophalen voor die unit.

https://fgheysels.github.io/


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Beetje psuedo-code, ken geen C:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array-Definitie:{
Naam
Aantal
};

Code:

Naam = lees regel

(Doorloop array)

Als de naam nog niet in de array voorkomt, de array vergroten en het item toevoegen met de ingelezen Naam en het aantal intellen op 1

Anders, als de naam wel voorkomt in de array, het Aantal verhogen met 1.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-05 14:03

curry684

left part of the evil twins

Als alle units genummerd zijn kun je toch gewoon een array van integers pakken en daarin hard indexeren? Als het random namen zijn moet je idd een hashtable van strings naar ints bouwen, da's dan ruim het snelste.

Professionele website nodig?


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Heb het ondertussen opgelost dmv een hashtable, wist niet zeker of dit de beste oplossing was, maar door jullie adviezen is dit idd bevestigd :D

voor de volledigheid, hieronder het stukje code (wellicht kan het anderen in de toekomst nog van dienst zijn)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Hashtable Units = new Hashtable();

            for( int i = 0; i < Cases.Count ; ++i )
            {
                 string st = (string) Cases[i];
                
                    // is the Unit currently in Hashtable?
                    // if not, then we add it ...

                    if ( ! Units.Contains( st ))
                        Units.Add( st, 1 );

                        // otherwise, we increment the count
                    else 
                        Units[ st ] = (int) Units[ st ] + 1;
                
            }


Allemaal bedankt!
Pagina: 1