Mam listę ciągów gdzie każdy element jest dowolny tekst opisujący umiejętności, więc wygląda trochę tak:
wyszukiwania kluczy słownikowych zawartych w tablicy ciągów
List<string> list = new List<string> {"very good right now", "pretty good",
"convinced me that is good", "pretty medium", "just medium" .....}
I chcę zachować użytkownikowi wynik dla tych darmowych tekstów. Więc teraz, używam warunki:
foreach (var item in list)
{
if (item.Contains("good"))
{
score += 2.5;
Console.WriteLine("good skill, score+= 2.5, is now {0}", score);
}
else if (item.Contains(low"))
{
score += 1.0;
Console.WriteLine("low skill, score+= 1.0, is now {0}", score);
}
}
Załóżmy W furure chcę użyć słownika do mapowania score, takich jak:
Dictionary<string, double> dic = new Dictionary<string, double>
{ { "good", 2.5 }, { "low", 1.0 }};
Jaki byłby dobrym sposobem na skrzyżowanie wartości słownikowe i lista ciągów znaków? Teraz widzę, jak to wygląda: zagnieżdżona pętla:
foreach (var item in list)
{
foreach (var key in dic.Keys)
if (item.Contains(key))
score += dic[key];
}
Ale jestem pewien, że są lepsze sposoby. Lepiej być szybszym lub bardziej przyjemnym dla oka (LINQ) przynajmniej.
Dzięki.
wątpię, że można to zrobić szybciej od większości innych sposobów (LINQ lub nie) będzie prawdopodobnie robi zagnieżdżone pętle za kulisami. Poza tym, jeśli nie masz tysięcy umiejętności, różnica w wydajności prawdopodobnie byłaby znikoma. IMHO, twoje proponowane rozwiązanie nie jest tak nieprzyjemne na oku :) – HaukurHaf
"Powodzenia w tym błazenie robić coś pożytecznego" -> zarówno "dobry" i "użyteczny". Powiedział, że twój projekt wydaje mi się rozsądny i mam nadzieję, że będę mógł czerpać korzyści z następnego przeglądu wydajności. –
Pamiętaj, że podejście ze słownikiem nie jest takie samo, jak podejście oryginalne, ponieważ dodajesz wynik dla każdego klucza w słowniku –