Ich habe diesen Code vor ein paar Tagen gemacht und habe eine ziemlich einfache Frage. Ich weiß, dass Fragen wie diese gestellt wurden, aber ich konnte nichts finden, was speziell für meinen Fall funktioniert. Ich möchte die Suchfunktion in Fall 3 in eine weniger komplexe Suchmethode ändern, also möchte ich sie grundsätzlich durch lineare Suche ersetzen. Wenn das nicht möglich ist, möchte ich die lineare Suche woanders implementieren. Habt ihr irgendwelche Hinweise? Alle Hilfe wird geschätzt.C#, Programm in lineare Suche ändern
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Loggbok
{
class MainClass
{
public static void Main(string[] args)
{
DateTime tiden = DateTime.UtcNow;//Skriver ut tiden vid varje inlägg
bool running = true;//Ger ett booleskt värde till variabeln running för att kunna skapa en loop
List<string[]> loggbok = new List<string[]>();//Här skapas listan som innehåller arrayen
while (running)//Här skapas loopen
{
Console.WriteLine("\n************************************");
Console.WriteLine("\nVälkommen till loggboken!");
Console.WriteLine("\n************************************");
Console.WriteLine("\n[1] Skriv nytt inlägg i loggboken");
Console.WriteLine("[2] Skriv ut alla loggar");
Console.WriteLine("[3] Sök inlägg i loggboken");
Console.WriteLine("[4] Radera innehåll i loggboken");
Console.WriteLine("[5] Avsluta loggboken");
Console.WriteLine("\n************************************");
Console.Write("\nVälj: ");
int option;//Int eftersom valet ska vara ett heltal
try
{
option = Int32.Parse(Console.ReadLine());//testar så att inmatningen är av typen Int
}
catch
{
Console.WriteLine("Fel, du får bara skriva in nummer");//Felmeddelande om inmatningen är en bokstav
continue;
}
switch (option)
{
case 1:
string[] logg = new string[2];//Här deklareras arrayen
Console.WriteLine("\n************************************");
Console.WriteLine(tiden);
Console.WriteLine("Ange en Titel:");
logg[0] = Console.ReadLine();//Här sparas titeln
Console.Clear();
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv inlägg:");
logg[1] = String.Format("{0}{1}{2}", Console.ReadLine(), Environment.NewLine, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//Här sparas inlägget samt datum och tid, detta är möjligt tack vare formattering
loggbok.Add(logg);
break;
case 2:
foreach (string[] item in loggbok)//För att skriva ut alla items i loggboken
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(item[0]);//För att skriva ut titel
Console.WriteLine(item[1]);//För att skriva ut inlägg
Console.WriteLine("\n--------------------------------------\n ");
}
Console.ReadLine();
break;
case 3:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken:");
var nyckelord = Console.ReadLine();//Här sparas inmatningen av nyckelordet
var entries = loggbok.Where(entry => entry.Any(item =>item.IndexOf(nyckelord, StringComparison.OrdinalIgnoreCase) > -1));//För att kontrollera om nyckelordet finns samt ignorera skiftlägeskänslighet, och finna både titel och inlägg
foreach (var entry in entries)//för att finna alla inlägg/titlar som matchar nyckelord
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(string.Join(", ", entry));//Skriver ut titel samt inlägg som matchat nyckelordet
Console.WriteLine("\n--------------------------------------\n ");
}
if (entries.Count() == 0)//Om ingen matchning hittas
{
Console.WriteLine("\n--------------------------------------\n ");
Console.Write("Din sökning misslyckades...");//Felmeddelande om ingen matchning hittas
Console.WriteLine("\n--------------------------------------\n ");
}
break;
case 4:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv titeln på det inlägg du vill ta bort:");
string title = Console.ReadLine();//Sparar titeln på inlägget användaren vill radera
for (int x = 0; x < loggbok.Count; x++) //Loopa igenom varje titel
{
if (String.Equals(loggbok[x][0], title, StringComparison.OrdinalIgnoreCase)) //Icke skiftlägeskänslig matchning av titeln.
{
loggbok.RemoveAt(x); //Matchning funnen.
}
else
{
Console.WriteLine("Titeln finns inte, återgår till huvudmenyn");
}
}
break; //Avsluta loopen.
case 5:
running = false;//Avslutar loopen och därmed programmet
break;
default:
Console.WriteLine("Nu blev det fel, välj mellan [1] [2] [3] [4] [5]");//Felmeddelande om valet är någon annan siffra än de som menyn innehåller
break;
}
}
}
}
}
Es gibt viel mehr Code hier als nötig - können Sie sie trimmen sie nur auf den gewünschten Teil vereinfachen? –
Der einzige nützliche Teil scheint die Zeile zu sein, die mit 'var entries = loggbok.Where (' beginnt. Die Suche sieht ziemlich einfach aus. Was willst du vereinfachen? –
Ich möchte, dass das Programm in diesem Teil so aussieht Fehler, den ich bekomme ist: Verwendung von nicht zugewiesenen lokalen Variablen logg – mackanmorre