Behöver lite hjälp med nested loops C#

Permalänk
Medlem

Behöver lite hjälp med nested loops C#

static void Main(string[] args) { bool isRunning = true; int menyVal; List<string[]> listLogg = new List<string[]> { }; string[] arrayLogg = new string[3]; while (isRunning) try { { Console.WriteLine("Välkommen till Loggboken!"); Console.WriteLine("\n[1] Skriv nytt inlägg i loggboken."); Console.WriteLine("[2] Sök inlägg efter titel i loggboken."); Console.WriteLine("[3] Skriv ut alla loggar."); Console.WriteLine("[4] Avsluta."); Console.Write("\nVälj: "); Int32.TryParse(Console.ReadLine(), out menyVal); switch (menyVal) { case 1: Console.Clear(); Console.Write("Titel: "); arrayLogg[0] = Console.ReadLine(); Console.Write("\nInlägg: "); arrayLogg[1] = Console.ReadLine(); DateTime tidLoggbok = DateTime.Now; var tidenLoggboken = Convert.ToString(tidLoggbok); arrayLogg[2] = tidenLoggboken; Console.Clear(); listLogg.Add(arrayLogg.ToArray()); Console.WriteLine("\nInlägget är nu sparat"); Console.ReadLine(); Console.Clear(); break; case 2: Console.Clear(); Console.Write("Skriv in titeln du vill söka efter i loggboken: "); var searchLogg = Console.ReadLine(); if (arrayLogg.Contains(searchLogg)) { foreach (string[] item in listLogg) { Console.WriteLine("\nTitel: {0} \nDatum: {1} \nText: {2}", arrayLogg[0], arrayLogg[2], arrayLogg[1]); break; } } if (listLogg.Count == 0) { Console.Clear(); Console.Write("Din sökning på \"" + searchLogg + "\" gav inga resultat!"); Console.ReadLine(); Console.Clear(); } break;

Behöver lite pointers på hur jag ska få till sökfunktionen under case 2, har testat innan med nested loops men får antingen bara att jag skriver ut senaste inlägget som jag sparat X-antal ggr eller så kommer jag bara inte åt de tidigare inläggen som sparats under listan.

Detta är en uppgift inför studier så behöver bara bli pekad i rätt riktning eller små tips!

La till code-taggar
Permalänk
Medlem

Det känns som att du är lite förvirrad över vad du vill att din "arrayLogg"-variabel ska göra. Du använder den för att lägga till ett inlägg i "listLogg", sen väljer du att hämta data från den.

Du har all data du behöver i "listLogg", så du behöver inte på något sätt blanda in "arrayLogg" när du vill hämta data. Så här ser innehållet ut när du har lagt till inlägg: http://imgur.com/a/q4dSR
Alltså en lista med arrayer av strängar.

Det du vill göra är (givet att du har en söksträng) att:
- Loopa igenom inläggen (precis som du har gjort)
- I varje iteration jämföra arrayindexet 0 (item[0] - titeln) med söksträngen
- Om det matchar - skriva ut item[0], item[1] och item[2]

Du behöver ingen nested loop för detta. Jag tror du gör det enklare för dig själv om du börjar med "[3] Skriv ut alla loggar.".

Permalänk
Medlem

Jag antar att det är ett krav att använda loopar och Listor?

Små pointers on sweclockers och forum generelt, det brukar finnas en [code] tag som kan användas för att spara tabbar

Att bryta ut funktioner är också guld värt för att få lite mer struktur.

Annars kan jag bara instämma med Nissan.

static void Main(string[] args) { bool isRunning = true; int menyVal; List<string[]> listLogg = new List<string[]> { }; string[] arrayLogg = new string[3]; while (isRunning) try { { Console.WriteLine("Välkommen till Loggboken!"); Console.WriteLine("\n[1] Skriv nytt inlägg i loggboken."); Console.WriteLine("[2] Sök inlägg efter titel i loggboken."); Console.WriteLine("[3] Skriv ut alla loggar."); Console.WriteLine("[4] Avsluta."); Console.Write("\nVälj: "); Int32.TryParse(Console.ReadLine(), out menyVal); switch (menyVal) { case 1: Console.Clear(); Console.Write("Titel: "); arrayLogg[0] = Console.ReadLine(); Console.Write("\nInlägg: "); arrayLogg[1] = Console.ReadLine(); DateTime tidLoggbok = DateTime.Now; var tidenLoggboken = Convert.ToString(tidLoggbok); arrayLogg[2] = tidenLoggboken; listLogg.Add(arrayLogg.ToArray()); Console.Clear(); Console.WriteLine("\nInlägget är nu sparat"); Console.ReadLine(); Console.Clear(); break; case 2: Console.Clear(); Console.Write("Skriv in titeln du vill söka efter i loggboken: "); var searchLogg = Console.ReadLine(); if (arrayLogg.Contains(searchLogg)) { foreach (string[] item in listLogg) { Console.WriteLine("\nTitel: {0} \nDatum: {1} \nText: {2}", arrayLogg[0], arrayLogg[2], arrayLogg[1]); break; } } if (listLogg.Count == 0) { Console.Clear(); Console.Write("Din sökning på \"" + searchLogg + "\" gav inga resultat!"); Console.ReadLine(); Console.Clear(); } break;

Permalänk
Medlem

Stort tack för svar! Skönt att få lite pointers så att man inser att man tänkt helt fel och kommer ur det!