Hur gör man så att binär sökning inte är case sensitive? (Nybörjare C#)

Permalänk
Medlem

Hur gör man så att binär sökning inte är case sensitive? (Nybörjare C#)

Hejsan!

Jag läser programmering1 och behöver hjälp med min binära sökning. Jag lyckas inte få till de så att sökningen inte blir skiftlägeskänsligt i C#.
Har tidigare i kursen använt mig av ToUpper metoden för linjärsökning men nu måste jag göra med binär sökning och lyckas inte få till det.
Skulle vara väldigt tacksam för tipps och hjälp!

Ha det fint!

Console.Write("\n\tSkriv in Titel du vill söka på: "); string key = Console.ReadLine(); if (key.Length <= 0) key = "a"; bool sökning = false; int första = 0; int sista = stringVektorLista.Count - 1; while (första <= sista && sökning != true) { int mellan = (första + sista) / 2; int ord = key.CompareTo(stringVektorLista[mellan][0].ToString()); if (ord > 0)// jämför första bokstaven i "ordet" första = mellan + 1; else if (ord < 0) sista = mellan - 1; else { Console.WriteLine("\n\t" + key + " finns och har inläggsnummer " + (mellan + 1) + " i bloggen!"); sökning = true; } } if (första > sista) //Om fösta index går över sista finns inte "ordet" i listan Console.WriteLine("\n\tSökningen lyckades inte.");

Permalänk
Medlem

Använd String.Compare med StringComparison.OrdinalIgnoreCase istället.

Permalänk
Medlem

Tusen tack!

Uppdaterade och nu fungerar det fint!

int ord = String.Compare(key.ToUpper(), stringVektorLista[mellan][0].ToUpper(), StringComparison.OrdinalIgnoreCase);

Permalänk
Medlem
Skrivet av Loppan3:

Tusen tack!

Uppdaterade och nu fungerar det fint!

int ord = String.Compare(key.ToUpper(), stringVektorLista[mellan][0].ToUpper(), StringComparison.OrdinalIgnoreCase);

Du behöver inte ToUpper-anropen där, det räcker med att bara använda OrdinalIgnoreCase för att göra jämförelsen skiftlägesokänslig (a.k.a case insensitive ).

D.v.s. du kan använda antingen ToUpper eller OrdinalIgnoreCase, men att använda båda är onödigt eftersom de i det här fallet gör samma sak. OrdinalIgnoreCase är dock effektivare eftersom jämförelsen sällan behöver kontrollera särskilt många karaktärer i strängarna för att avgöra att de är olika, medan ToUpper alltid måste konvertera båda strängarna helt.

Permalänk
Medlem

Tusen tack för din hjälp! Uppstaffar det verkligen!

Permalänk
Medlem

Försök använda engelska i din kod. Du själv och andra som ska läsa din kod på eventuellt jobb senare komma bli galna med att läsa kod på engelska o sen variabler o sånt på Svenska.
Menar att är lättare för dig att lära dig från början att använda engelska ord direkt än att byta när du väl ska jobba sen.

Visa signatur

ASUS X570-F, AMD Ryzen 9 3900x, 16Gb RAM, Gigabyte 2070Super auros