En mulig løsning kunne være at du i din klasse. Sortere array'et - og der efter gennem løber det. Så er der kun et gennem løb. Så er det bare at tælle ord op - og hver gang der kommer et ny ord, startes en ny optælling.
Der står flere steder, jeg har kigget at hashtable.Item(key) er måden at få fat i et element i hashtable, men Item eksisterer ikke i mit .net framework (1.1) Jeg fatter minus.
public class WordCount : IComparable { string word; int count; public WordCount(string word) { this.word = word; this.count = 1; } public string Word { get { return word; } } public int Count { get { return count; } } public void Increment() { count++; } public int CompareTo(object o) { return ((WordCount)o).Count - count; } }
public class WordCountList { private Hashtable list; private int minlen; public WordCountList(int minlen) { this.list = new Hashtable(); this.minlen = minlen; } public void AddWord(string word) { if(word.Length >= minlen) { if(list.ContainsKey(word)) { ((WordCount)list[word]).Increment(); } else { list.Add(word, new WordCount(word)); } } } public void AddText(string text) { string[] words = text.Split(" ".ToCharArray()); for(int i = 0; i < words.Length; i++) { AddWord(words[i]); } } public ICollection GetTop(int n) { ArrayList temp = new ArrayList(); temp.AddRange(list.Values); temp.Sort(); temp.RemoveRange(n, temp.Count - n); return temp; } }
class TestClass { public static void Test(string s) { WordCountList proc = new WordCountList(1); proc.AddText(s); ICollection top = proc.GetTop(3); foreach(WordCount wc in top) { Console.WriteLine(wc.Word + " : " + wc.Count); } } public static void Main(string[] args) { Test(@"Dette er en lille test - er en en"); } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.