C#.NET Dictionary till sträng

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

C#.NET Dictionary till sträng

Halloj allihopa!

Har gjort så att jag har en dictionary som jag använder för att hålla koll hur många gånger ord förekommer i en viss text. Jag räknar dem genom att loopa igenom varje, finns det ett smartare sätt kanske(?). Vill hursomhelst returna Top 5 träffar på ord. Själva sortering och få ut de top 5 är väldigt enkelt, det är inte det som är problemet. Utan jag vill ha tillbaks de som en sträng. Liknande "ord1 ord2 ord3 ord4 ord5".
Kan förtydliga med lite kod (loopar bara igenom, räknar dem inte än. Ska lägga till det snart):

public string GetKeyWords(string TextIn) { IDictionary<string,int> Words = new Dictionary<string,int>(); foreach (string Word in TextIn.Split(' ')) { } //Här vill jag returnera Words som en sträng, med ett snabbt och enkelt sätt utan så många rader. Går ju lätt att göra en loop men vill helst ha något snyggare sätt. }

Tacksam för svar!

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Tokyo
Registrerad
Nov 2002

StringBuilder sb = new StringBuilder(); foreach(...) { sb.Append(Word).Append(' '); } return sb.ToString().Trim();

Code-läget och normala indenteringar verkar inte vara bästa vänner...

www.uu.se - some kind of university | www.hirr.org.uk - ain't no mountain high enough | www.bajenfans.se

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Jul 2001
Citat:

Själva sortering och få ut de top 5 är väldigt enkelt

Att sortera en Dictionary på value är väl inte lätt? Hur gör du det utan att loopa igenom allt? Om du kan lösa en sån sak borde det du frågar efter vara en pissak (vilket det är), så det känns som antingen har jag missat något i din frågeställning eller så har du missuppfattat hur dictionary fungerar...

"May God stand between you and harm in all the empty places you must walk"

Trädvy Permalänk
Medlem
Plats
Tokyo
Registrerad
Nov 2002

Jag vet att det inte efterfrågades, men här kommer hur man enkelt kan sortera en Dictionary:

Dictionary<string, int> Words = new Dictionary<string, int>(); Words.Add("tvåa", 4); Words.Add("etta", 2); Words.Add("trea", 9); var sorted = from key in Words.Keys orderby Words[key] descending select key;

www.uu.se - some kind of university | www.hirr.org.uk - ain't no mountain high enough | www.bajenfans.se

Trädvy Permalänk
Medlem
Plats
Laholm
Registrerad
Okt 2005

LOL!

IDictionary<string, int> words = new Dictionary<string, int>() { { "Tvåa", 1 }, { "Trea", 2 }, { "Fyra", 45 } }; IEnumerable<string> sorted = words.Values.OrderByDescending(x => x); /* Vad du vill göra... */ public string GetWords(string input) { IDictionary<string, int> wordsCount = new Dictionary<string, int>(); foreach(string word in input.Split(' ').Select(s => s.ToLower())) { if(wordsCount.ContainsKey(word)) { wordsCount[word] += 1; } else { wordsCount.Add(word, 1); } } return string.Join(' ', wordsCount.Keys.OrderByDescending(s => s).Take(5).ToArray()); }

Tror den metoden gör exakt vad du vill göra... Inte kompilerad eller testad...

EDIT: Såg att du ville ha en sträng "word1 word2 word3" och inte "word1, word2, word3". Ändrade string.Join(', '... till string.Join(' '...

ASP.NET programmerare i C#
Twitter: http://www.twitter.com/hagbarddenstore

Trädvy Permalänk
Medlem
Plats
Tokyo
Registrerad
Nov 2002
Citat:

Ursprungligen inskrivet av hagbarddenstore
LOL!

Jag är jätteintresserad av vad det är som är "LOL" med den här tråden. Din attityd?

www.uu.se - some kind of university | www.hirr.org.uk - ain't no mountain high enough | www.bajenfans.se

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Tack för alla svar:) Fått det som jag ville nu!
@Hagbard
Din kod gjorde det jag ville men sorteringen hamnade på Key istället för value. Så jag fick ut alla ord som började på ö t.ex. Så här har jag skrivit det nu:

IDictionary<string,int> Words = new Dictionary<string,int>(); foreach (string word in input.Split(' ').Select(s => s.ToLower())) { if (Words.ContainsKey(word)) { Words[word] += 1; } else { Words.Add(word, 1); } } return string.Join(" ", (from key in Words.Keys orderby Words[key] descending select key).Take(30).ToArray());

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Fortsätter i samma tråd.. Om jag vill hämta ut alla då? Vill helst göra det här utan loop det också. Har dock med ett exempel på hur loopen ser ut så ni iallafall förstår vad jag vill åstadkomma, dock vill jag skriva det med ett LinqQuery:

using (WordDB db = new WordDB()) { IDictionary<string,int> Words = new Dictionary<string, int>(); foreach(LinqWord Word in db.LinqWords) { Words.Add(Word.Word, Word.Count); } return Words; }

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Citat:

Ursprungligen inskrivet av bobamatics
Jag vet att det inte efterfrågades, men här kommer hur man enkelt kan sortera en Dictionary:

Dictionary<string, int> Words = new Dictionary<string, int>(); Words.Add("tvåa", 4); Words.Add("etta", 2); Words.Add("trea", 9); var sorted = from key in Words.Keys orderby Words[key] descending select key;

Fusk att använda FW 3.5

ηλί, ηλί, λαμά σαβαχθανί!?