Permalänk

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!

Visa signatur

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

Permalänk

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...

Visa signatur

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

Permalänk
Medlem
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...

Permalänk

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;

Visa signatur

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

Permalänk

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(' '...

Permalänk
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?

Visa signatur

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

Permalänk

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());

Visa signatur

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

Permalänk

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; }

Visa signatur

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

Permalänk
Medlem
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

Visa signatur

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