Entwickler-Ecke

C# - Die Sprache - int Array inthalt vergleichen


Daniel R. - Di 25.05.10 11:03
Titel: int Array inthalt vergleichen
Hallo Gemeinde,

ich bin neu im Forum,

ich mache schon eine weile ein kleines Projekt.
und bin auf ein problem gestoßen wo ich spontan keine lösung fand.

ich wär sehr dankbar wenn ihr mir zumindest einen denkanstoß geben könnt.

ich brauch auch nicht umbedingt code ..


also mein problem:

ich habe ein int array, bei dem ab und zu gleiche werte auftreten z.b


C#-Quelltext
1:
2:
3:
4:
5:
6:
int[0] = 10;
int[1] = 11;
int[2] = 10;
int[3] = 11;
int[1] = 12;
int[4] = 10;


und so weiter...

ich möchte die gleich auftreten zahlen und ausgeben z.b:


Es kommt 2 mal die zahl 11 vor und 3 mal die zahl 10.

das wars schonmal.

vielen dank für vllt baldige hilfe.

mfg
daniel

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


danielf - Di 25.05.10 11:20

Hallo und :welcome:,

wie würdest du es den machen, wenn du es selber machst? Also nicht über ein Programm? Ich denke das ist immer die erste Überlegung um einen Algorithmus zu finden.

Es ist klar, dass du dir jedes Element anschauen musst (Schleife). Dann musst du dir merken ob die Zahl schon vor kam. In der Realität würde ich eine Strichliste für jede Zahl machen und wenn die Zahl erneut vorkommt einen Strich dahinter.

Sprich du hast folgenden ABlauf:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// 1) schau jedes Element an

// 2) Überprüfe ob die Zahl neu ist

// 2 Ja) Erstelle Strichliste/Zahl mit dem Wert 1

// 2 Nein) Erhöhe Strichliste/Zahl um eins

// 3) Gebe das Ergebnis aus


Soweit zum Ablauf. Diesen gilt es nun zu implementieren.

Viel Erfolg,
Gruß


Daniel R. - Di 25.05.10 11:33

Zitat:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// 1) schau jedes Element an

// 2) Überprüfe ob die Zahl neu ist

// 2 Ja) Erstelle Strichliste/Zahl mit dem Wert 1

// 2 Nein) Erhöhe Strichliste/Zahl um eins

// 3) Gebe das Ergebnis aus



hallo und vielen dank für den denkanstoß,

das anschauen der elemente ist mir klar,

ich weiss aktuel grade nur nicht wie ich das am besten implementieren soll....

ich wuerde halt stelle fuer stelle durchgehn und schauen ob die aktuelle stelle der nächsten entspricht,

ich bin noch nicht ganz c# befreundet .. aber wie setz ich das ambesten um?


C#-Quelltext
1:
2:
3:
4:
5:
arraystelle[0in nen puffer schreiben

schauen ob stellen [1-arrayende] dem puffer entsprechen dann speichern.

dann für die anderen stellen auch!


aber dies ist ja dann sicher extrem rechenlastig ..

hat jemand ein besseren vorschlag?

gruß


Th69 - Di 25.05.10 11:59

Verwende ein Dictionary<int, int> bei dem du für jede Zahl den Zähler erhöhst (d.h. bei ersten Einfügen den Zähler auf 1 setzen).


Daniel R. - Di 25.05.10 13:23

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Verwende ein Dictionary<int, int> bei dem du für jede Zahl den Zähler erhöhst (d.h. bei ersten Einfügen den Zähler auf 1 setzen).


hallo,

da ich ehrlich noch nie ein dicitonary verwendet habe,
wie bekomm ich ein array, desen werte gleich sind, in ein dictionary ohne das er mir schreit : "schlüssel bereits vorhanden"?

Gruss Daniel


P.S. fühl mich gerade doch nicht so bewandert in C# wie ich gedacht habe!


Kha - Di 25.05.10 14:24

Deswegen musst du zuerst einmal für jede Zahl i nachschauen, ob sie schon vorhanden ist - das machst du mit TryGetValue. Wird true zurückgeliefert, erhöhst du den Wert um eins und weist ihn dict[i] zu, ansonsten fügst du die Zahl mit dict.Add(i, 1) neu ein.

PS: Liegen die Werte in einem konstanten (engen) Bereich, kannst du statt eines Dictionarys auch ein zweites Array einsetzen. Und wenn du die Aufgabe einmal zu Fuß umgesetzt hast, gäb's da noch einen LINQ-Einzeiler ;) ...