public void AddWord(string word, TRIENode rootNode, string id) { int len = word.Length; if (len == 0) { rootNode.PrefixCount++; rootNode.IsCompleteWord = true; rootNode.Ids.Add(id); return; } for (int i = 0; i < len; i++) { string key = word.Substring(i, 1); string lowerVersionKey = key.ToLower(); if (!rootNode.Children.ContainsKey(lowerVersionKey)) { rootNode.Children.Add(lowerVersionKey, new TRIENode()); rootNode.Children[lowerVersionKey].ActualChar = key; } rootNode.PrefixCount++; rootNode = rootNode.Children[lowerVersionKey]; } rootNode.IsCompleteWord = true; rootNode.Ids.Add(id); }
public void RemoveWord(string word, TRIENode rootNode, string id) { int len = word.Length; if (len == 0) { rootNode.PrefixCount--; if (rootNode.PrefixCount == 0) { rootNode.IsCompleteWord = false; } rootNode.Ids.Remove(id); return; } for (int i = 0; i < len; i++) { string key = word.Substring(i, 1); string lowerVersionKey = key.ToLower(); rootNode.PrefixCount--; rootNode = rootNode.Children[lowerVersionKey]; } rootNode.Ids.Remove(id); if (rootNode.Ids.Count == 0) { rootNode.IsCompleteWord = false; } }
public void GetAutoCompleteList(TRIENode matchedNode, string completeWord, List <AutoCompleteResult> wordList) { foreach (var item in matchedNode.Children) { string tmpWord = completeWord + item.Value.ActualChar; if (item.Value.IsCompleteWord) { AutoCompleteResult r = new AutoCompleteResult(); r.id = string.Join(",", item.Value.Ids); r.label = tmpWord; r.value = tmpWord; wordList.Add(r); } GetAutoCompleteList(item.Value, tmpWord, wordList); } }
public TRIENode GetMatchedNode(string prefix, TRIENode rootNode) { int len = prefix.Length; if (len > 0) { for (int i = 0; i < len; i++) { string key = prefix.Substring(i, 1); string lowerVersionKey = key.ToLower(); if (!rootNode.Children.ContainsKey(lowerVersionKey)) { return(null); } rootNode = rootNode.Children[lowerVersionKey]; } return(rootNode); } return(null); }