Autor Beitrag
Daniel R.
Hält's aus hier
Beiträge: 3

Win7, WinXp
C# (Anfänger),
BeitragVerfasst: Di 25.05.10 11:03 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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:
ausblenden 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. Threadstarter
Hält's aus hier
Beiträge: 3

Win7, WinXp
C# (Anfänger),
BeitragVerfasst: Di 25.05.10 11:33 
Zitat:

ausblenden 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?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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. Threadstarter
Hält's aus hier
Beiträge: 3

Win7, WinXp
C# (Anfänger),
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 ;) ...

_________________
>λ=