Entwickler-Ecke
C# - Die Sprache - von for Scheife zum foreach....
tomycat - Mi 30.06.21 09:04
Titel: von for Scheife zum foreach....
hallo,
ich habe ein Array mit einem Block und jeder Block hat eine Line.
Mit einer
for-Schleife alter Schule, keine Problem.
Problem:
1. Ein 2 Dim. Array deren Größen unbekannt sind. Wie definiere ich den 2 dim. Key?
2. Die 2 Schleifen die alles auslesen. So geht´s. Wie muss man die Schleife umbauen, wenn der Block 1000 groß ist?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| string[,] key = new string[20,20];
for (int block = 0; block < 3; block++) { for (int line = 0; line < 4; line++) { if(key[block, line] == "test12345") { Console.WriteLine("----> " + key[block, line]); } } } |
tomycat - Mi 30.06.21 10:00
sorry, ich muss meine Frage anders stellen.
die größe vom Block und Line ist unbekannt.
Jeder Block habe Zeilen(line).
1.Schleife: jeder Block soll gelesen werden.
2.Schleife: in einem Block solle jeder Zeile(line) untersucht werden.
Für eine Dim, wäre das die Lösung, wie sieht das mit 2 Dim aus?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| int[] a = new int[4]; a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3;
foreach (int number in a) { Console.WriteLine(number); if(number == 1) { Console.WriteLine("yes"); } } |
Th69 - Mi 30.06.21 10:05
Du versteifst dich zu sehr auf das Ändern von for zu foreach.
Benutze einfach eine dynamische Liste: List<List<string>>
Ralf Jansen - Mi 30.06.21 11:18
Ob Array oder List<T> oder irgendwas anderes ist egal. Alles sind aufzählbare Typen (IEnumerable(s))
Und ob vor foreach oder for ist ebenso egal beides geht mit aufzählbaren Typen.
Ob for oder foreach solltest du daran festmachen ob du nochmal einen indexierten Zugriff auf das zu iterierende Ding brauchst (dann for) oder ob dir in der Schleife das aktuelle Objekt reicht (dann foreach).
Iteriert wird immer über eine Dimension. Insofern hast du üblicherweise auch immer soviel geschachtelte Schleifen wie du Dimensionen hast. Insbesondere bei Dimensionen die in sich nicht die gleiche Länge haben. (Ausgenommen Sonderfälle oder die Benutzung von Techniken z.b. Linq wo du die Schleifen nur nicht mehr siehst)
Das wechseln von for nach foreach wegen der dynamischen Größe ist auch unnötig sowohl Array als auch eine List<T> kennen ihre Größe man muss in einem for keine Konstante benutzen.
Th69 - Mi 30.06.21 12:59
Das ist aber trotzdem die falsche Datenstruktur (laut deiner Beschreibung bzgl. Blöcke und Line).
Die Umstellung sollte nicht sehr viel Umbau bedeuten (eigentlich nur das Erzeugen der Daten).
Und statt GetUpperBound(dim) benutze, wie von mir schon geschrieben, GetLength(dim), damit die for-Schleife die normale Form mittels < (und nicht <=) hat.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!