[C#] foreach if fler namn på igång men bara den första som ska räknas

Permalänk
Avstängd

[C#] foreach if fler namn på igång men bara den första som ska räknas

Den här koden är bara ett example av den riktiga koden.

Den här koden kolla igenom listan efter just ordet "puff" men jag kommer att får ut 3 st men jag vill bara ha ut den första jag kan inte köra med.

arr2[4]

Då det blir olika varje gång då den riktiga koden inte kör med någon lista utan hämta det ur en webb.

Ibland sitter man fast med små saker som ibland är lite svårt att komma på hur man ska lösa problemet.

string[] arr2 = { "pong", "pong", "three", "pong", "puff", "pong", "pong", "puff", "pong", "puff", "pong" }; foreach (string name in arr2 ) { if(name == "puff") { MessageBox.Show(name); // kommer att komma upp 3 gånger men bara en gång ska den komma upp. Bara den första som kommer ska räkas och dom andra som kommer efter ska bara ignoreras. } }

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem

Lägg till "break;" efter MessageBox.Show(name); så kommer loopen avslutas direkt när det händer.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Avstängd
Skrivet av Tobberoth:

Lägg till "break;" efter MessageBox.Show(name); så kommer loopen avslutas direkt när det händer.

Just det. Tack så mycket.

Edit: Hur ska jag göra för att får ut det andra ut listan?

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

Just det. Tack så mycket.

Edit: Hur ska jag göra för att får ut det andra ut listan?

Typ?!

string[] arr2 = { "pong", "pong", "three", "pong", "puff", "pong", "pong", "puff", "pong", "puff", "pong" }; bool found = false; foreach (string name in arr2 ) { if(name == "puff" && !found) { MessageBox.Show(name); found = true; } }

Permalänk
Medlem

Distinct kanske kan vara till hjälp?

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Hedersmedlem

Jag gillar inte foreach, för den gör en kopia på varje objekt när du loopar. Med en string är det kanske inget större problem, men om det är ett mer avancerat objekt så tar det ju en stund att göra kopian.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Jag gillar inte foreach, för den gör en kopia på varje objekt när du loopar. Med en string är det kanske inget större problem, men om det är ett mer avancerat objekt så tar det ju en stund att göra kopian.

Det stämmer inte. "The iteration variable corresponds to a read-only local variable with a scope that extends over the embedded statement." https://msdn.microsoft.com/en-us/library/aa664754%28v=vs.71%2...

Testa till exempel

class Program { static void Main(string[] args) { var p1 = new Person { Name = "aaa" }; var p2 = new Person { Name = "bbb" }; var persons = new List<Person> { p1, p2 }; foreach(var p in persons) { p.Name = "changed"; } Console.WriteLine(p1.Name); } } public class Person { public string Name { get; set; } }

Permalänk
Avstängd

Lösningen för mitt problem.

För att lösa mitt problem så fick det blir den här lösningen för mig.

string[] arr2 = { "pong", "pong", "three", "pong", "puff", "pong", "pong", "puff", "pong", "puff", "pong" }; string good = "help"; foreach (string name in arr2 ) { if(name == "puff" && good == "help") { MessageBox.Show(name); good = "good job"; } }

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

För att lösa mitt problem så fick det blir den här lösningen för mig.
[/CODE]

Ungefär precis som jag föreslog då.

Permalänk
Avstängd
Skrivet av iXam:

Ungefär precis som jag föreslog då.

Ja men jag använder just string till en annan sak då tänkt jag att jag kan ta den än att göra en bool.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

Ja men jag använder just string till en annan sak då tänkt jag att jag kan ta den än att göra en bool.

Det finns ingen logisk anledning att använda en String istället för en boolean när det är true eller false. Det tar både mer minne och gör koden svårare att läsa genom använda en String (med kassa namn) över en boolean i detta fall.

Visa signatur

Citera så att jag hittar tillbaka! AMD Ryzen 7 5800X3D | MSI B450 Tomahawk Max | 32GB Ballistix @ 3733/16 | EVGA 2070 | Crucial MX500 2TB | EVGA G2 750W | Windows 10

Permalänk
Medlem

string[] arr2 = { "pong", "pong", "three", "pong", "puff", "pong", "pong", "puff", "pong", "puff", "pong" }; foreach (string name in arr2) { if (name.Contains("puff")) { MessageBox.Show(name); break; } }

Visa signatur

Still play with birds like I hang with mother goose.

Permalänk
Datavetare

Varför inte bara använda collection.Any(pred) om man bara vill veta om något förekommer minst en gång?

string[] arr2 = { "pong", "pong", "three", "pong", "puff", "pong", "pong", "puff", "pong", "puff", "pong" }; string name = "puff"; // det man vill söka efter if (arr2.Any(str => str == name)) { MessageBox.Show(name); }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer