Beispiel #1
0
            public override Tuple <string, V> Next()
            {
                while (_entries.Count == 0 && _begin < c.Length)
                {
                    _entries = _trie.PrefixMatchWithValue(c, _begin, c.Length, 0);
                    _begin++;
                }

                if (_entries.Count == 0 && _begin < c.Length)            // 总觉得这是多余的
                {
                    _entries = _trie.PrefixMatchWithValue(c, _begin, c.Length, 0);
                    _begin++;
                }
                if (_entries.Count == 0)
                {
                    return(null);
                }

                var fst = _entries[0];

                _entries.RemoveAt(0);
                offset = _begin - 1;
                return(fst);
            }
Beispiel #2
0
 public override Tuple <string, Pinyin[]> Next()
 {
     while (_begin < c.Length)
     {
         var list = _trie.PrefixMatchWithValue(c, _begin, c.Length, 0);
         if (list.Count == 0)
         {
             ++_begin;
         }
         else
         {
             var last = list[list.Count - 1];
             offset  = _begin;
             _begin += last.Item1.Length;
             return(last);
         }
     }
     return(null);
 }
 /// <summary>
 /// 获取下一个(最长)匹配词语
 /// </summary>
 /// <returns></returns>
 public override Tuple <string, string> Next()
 {
     while (_begin < c.Length)
     {
         var list = _trie.PrefixMatchWithValue(c, _begin, c.Length, 0);
         if (list.Count == 0)
         {
             ++_begin;
         }
         else
         {
             var t = list.Last();        // 选取最长匹配
             offset  = _begin;
             _begin += t.Item1.Length;
             return(t);
         }
     }
     return(null);
 }