示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
 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);
     }
 }
示例#4
0
        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);
        }