Linjär sökning c# (behöver hjälp)

Permalänk
Medlem

Linjär sökning c# (behöver hjälp)

Jag håller på med ett program i C# och behöver hjälp med att få en linjär sökning att fungera.
Jag använder en foreach loop för att skriva ut värden från en list-array i switch 2 och det funkar jättebra men jag ska ha en linjär sökning i switch 3 som jag inte får att fungera och jag har försökt med allt jag kommer på.

Grejen är att om jag lägger in en if sats för att jämföra om sokOrd och s matchar så ändras s-variabelns värde till det man söker till.
Innan jag lägger till if-satsen så skrivs s-variabeln värde ut men då på alla inlägg och då funkar ju inte sökningen.
Vore väldigt tacksam för hjälp!

Här är min kod
https://pastebin.com/VHsSEZyX

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Medlem
Skrivet av speedway:

Jag håller på med ett program i C# och behöver hjälp med att få en linjär sökning att fungera.
Jag använder en foreach loop för att skriva ut värden från en list-array i switch 2 och det funkar jättebra men jag ska ha en linjär sökning i switch 3 som jag inte får att fungera och jag har försökt med allt jag kommer på.

Grejen är att om jag lägger in en if sats för att jämföra om sokOrd och s matchar så ändras s-variabelns värde till det man söker till.
Innan jag lägger till if-satsen så skrivs s-variabeln värde ut men då på alla inlägg och då funkar ju inte sökningen.
Vore väldigt tacksam för hjälp!

Här är min kod
https://pastebin.com/VHsSEZyX

Det är nog något som är tokigt tidigare i din kod, jag kopierade över din och formaterade den lite bättre, verkar fungerar som du vill:

int switchCondition = 3; List<string[]> listOfStringArrays = new List<string[]> { new string[] { "hej", "kaka", "natt" } }; switch (switchCondition) { case 2: // Skriv ut det användaren skrivit in Console.WriteLine("Dina skrivna inlägg\n "); foreach (string[] stringArray in listOfStringArrays) { foreach (string s in stringArray) { Console.WriteLine(s); } } Console.WriteLine("\nTryck på valfri tangent för att återgå till menyn"); Console.ReadKey(); // För att undvika att menyn körs break; case 3: // sök inlägg Console.Write("Skriv in en titel för att söka efter ett inlägg: "); string userSearchWord = Console.ReadLine(); foreach (string[] stringArray in listOfStringArrays) { foreach (string s in stringArray) if (s == userSearchWord) { Console.WriteLine(s); } } break; }

Skriver jag in "hej" så får jag utskriften "hej"

Permalänk
Medlem

Tack för ditt svar
Hittar tyvärr inte felet själv så jag lägger in min kod från och med listan om du har tid och lust att hjälpa mig hitta felet?

https://pastebin.com/N9nSJzdb

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Medlem

Ser inga fel, men har inte testkört koden

Permalänk
Medlem
Skrivet av elBenko:

Ser inga fel, men har inte testkört koden

Felet som är nu är att om man skriver in ett inlägg och sen ska söka efter det
tex
Jag skriver in i switch 1, titel och inlägg
titel: hej
inlägg: då

Sen när man ska söka efter det så skrivs bara ordet man söker på ut.
alltså skriver jag hej som sökord så skrivs bara hej och datumet ut men inte då.

Hur får jag det att skriva ut hela inlägget?
Tar jag bort if-satsen och skriver ut variabeln-s så skrivs hela inläggen ut men då skrivs ju alla inlägg ut och då funkar ju inte sökningen.

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Avstängd
Skrivet av speedway:

Felet som är nu är att om man skriver in ett inlägg och sen ska söka efter det
tex
Jag skriver in i switch 1, titel och inlägg
titel: hej
inlägg: då

Sen när man ska söka efter det så skrivs bara ordet man söker på ut.
alltså skriver jag hej som sökord så skrivs bara hej och datumet ut men inte då.

Hur får jag det att skriva ut hela inlägget?
Tar jag bort if-satsen och skriver ut variabeln-s så skrivs hela inläggen ut men då skrivs ju alla inlägg ut och då funkar ju inte sökningen.

Jag vet hur du ska lösa det.

Du söker och få bara den första och inte den andra.

Men om man vill fula sig lite i koden kanske inte är den bästa men den funkar.

Din:

foreach (string s in item) if(s == sokOrd) { Console.WriteLine(s); Console.WriteLine(dateOfNow); }

Min:

for (int i = 0; i < item.Count; i++) { Console.WriteLine(item[i] + " " + item[i + 1]); Console.WriteLine(dateOfNow); }

Min kod bör funka har inte testat då jag inte orka starta mitt program.

Värt att tänka på att du kommer behöva lägga till lite if fråga annans kommer du få error om dom skriver fel.

Edit: glömde din if fråga.

Visa signatur

Man är inte dum för att man har stavproblem.
Läs mer om min synfel Visual Snow
Om mig ----> #16970666

Permalänk
Medlem
Skrivet av superegg:

Jag vet hur du ska lösa det.

Du söker och få bara den första och inte den andra.

Men om man vill fula sig lite i koden kanske inte är den bästa men den funkar.

Din:

foreach (string s in item) if(s == sokOrd) { Console.WriteLine(s); Console.WriteLine(dateOfNow); }

Min:

for (int i = 0; i < item.Count; i++) { Console.WriteLine(item[i] + " " + item[i + 1]); Console.WriteLine(dateOfNow); }

Min kod bör funka har inte testat då jag inte orka starta mitt program.

Värt att tänka på att du kommer behöva lägga till lite if fråga annans kommer du få error om dom skriver fel.

Edit: glömde din if fråga.

Tack så mycket för ditt svar.
A local or parameter named 'item' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter
Då slutade item i foreach loopen i switch 2 att fungera. Testade att deklarera en string item i main men hjälpte inte.
Då vet jag inte heller vad jag ska jämföra sokOrd med? item går inte

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Medlem

Om jag fattat det rätt vill du skriva ut alla fälten i det objektet där något av elementen matchar s?

Då måste du ju verkligen skriva ut allihopa och inte bara det som matchar. dvs du måste använda en variabel högre upp.

foreach (string[] stringArray in listOfStringArrays) <- ÅTERANVÄND DENNA, DEN INNEHÅLLER JU ALLT { foreach (string s in stringArray) if (s == userSearchWord) {//SKRIV UT ALLA INGÅENDE ELLEMENT OM ETT MATCHAR foreach (string strResult in stringArray) Console.WriteLine(strResult); break; //LÄGG TILL ETT BREAK HÄR SÅ VI INTE FÅR DUBBLA UTSKRIFTER OM FLERA ELEMENT I SAMMA OBJEKT STÄMMER PÅ SÖKNINGEN } } break;

Om du vill bli en fena på programmering måste du lägga tid på att lära dig "Regular Expressions". Det verkar knepigt i början men det är såå jäkla effektivt om man väl fattar hur det funkar.

Extra tips
Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av ZecretW:

Om jag fattat det rätt vill du skriva ut alla fälten i det objektet där något av elementen matchar s?

Då måste du ju verkligen skriva ut allihopa och inte bara det som matchar. dvs du måste använda en variabel högre upp.

foreach (string[] stringArray in listOfStringArrays) <- ÅTERANVÄND DENNA, DEN INNEHÅLLER JU ALLT { foreach (string s in stringArray) if (s == userSearchWord) {//SKRIV UT ALLA INGÅENDE ELLEMENT OM ETT MATCHAR foreach (string strResult in stringArray) Console.WriteLine(strResult); break; //LÄGG TILL ETT BREAK HÄR SÅ VI INTE FÅR DUBBLA UTSKRIFTER OM FLERA ELEMENT I SAMMA OBJEKT STÄMMER PÅ SÖKNINGEN } } break;

Om du vill bli en fena på programmering måste du lägga tid på att lära dig "Regular Expressions". Det verkar knepigt i början men det är såå jäkla effektivt om man väl fattar hur det funkar.

Tack så mycket! Funkar perfekt!
Helt otroligt hur mycket tid jag lagt ner på att få just det här att fungera så är otroligt tacksam
Ok jag ska läsa på om "Regular Expressions"

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Medlem
Skrivet av speedway:

Tack så mycket! Funkar perfekt!
Helt otroligt hur mycket tid jag lagt ner på att få just det här att fungera så är otroligt tacksam
Ok jag ska läsa på om "Regular Expressions"

Inga problem, det viktigaste är bara att du vet HUR och VARFÖR det fungerar. det farligaste som finns är att bli en stackOverflow programmerare som bara klipper och klistrar hej vilt utan att fatta varför det funkar eller inte gör det.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av ZecretW:

Inga problem, det viktigaste är bara att du vet HUR och VARFÖR det fungerar. det farligaste som finns är att bli en stackOverflow programmerare som bara klipper och klistrar hej vilt utan att fatta varför det funkar eller inte gör det.

Ja precis men jag är väldigt seriös och vill förstå allt jag skriver annars utvecklas jag inte.

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Medlem
Skrivet av speedway:

Ja precis men jag är väldigt seriös och vill förstå allt jag skriver annars utvecklas jag inte.

Gött..

I så fall ber jag dig läsa detta om strängjämförelser och använda det istället för == som rent ut sagt är ett skitdåligt alternativ även om det funkar.

string.Equals

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem

Ok det ska jag göra, tack för tipset!

Skickades från m.sweclockers.com

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.

Permalänk
Medlem

Ser att du fått hjälp med problemet. Precis som tidigare postare skriver så skriver du bara ut strängen som matchar söksträngen.

Förresten, gissar på att det är en uppgift där du ska lära dig använda listor och arrayer, men ett bättre alternativ, eller åtminstone en bra övning, hade varit att behandla varje "inlägg" som ett klassobjekt i stället för en array av strängar, som i sin tur innehåller datum, titel, inläggstext, signatur osv. Bara en liten tanke

Lycka till!

Permalänk
Medlem
Skrivet av elBenko:

Ser att du fått hjälp med problemet. Precis som tidigare postare skriver så skriver du bara ut strängen som matchar söksträngen.

Förresten, gissar på att det är en uppgift där du ska lära dig använda listor och arrayer, men ett bättre alternativ, eller åtminstone en bra övning, hade varit att behandla varje "inlägg" som ett klassobjekt i stället för en array av strängar, som i sin tur innehåller datum, titel, inläggstext, signatur osv. Bara en liten tanke

Lycka till!

Ja precis det är en uppgift så jag måste använda mig av listor och arrayer.
Ok jag ska kolla upp det, tack för hjälpen!
Jag har ett konstigt problem igen, om jag lägger en else if under och skriver om s != (inte är lika med) sokOrd så skrivs båda ut iaf.
skulle vilja ha nån felhantering här så användaren får ut ett felmeddelande om sökningen inte hittas.
Hur kan variabeln s vara lika med sokOrd men samtidigt inte vara det?

Visa signatur

Asus P8P67 B3, Asus GTX 660, A-data 8GB minne 1600mhz, Intel 2600K, Samsung ssd 830 256gb
sidewinder 4, Corsair ax 850, Samsung galaxy s4 snart, Windows 8.