src/DotNetCommon.PinYin/Internals/BaseSearch.cs
(开头部分) 3KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DotNetCommon.PinYin.Internals
{
internal abstract class BaseSearch
{
protected internal TrieNode2[] _first = new TrieNode2[char.MaxValue + 1];
protected internal string[] _keywords;
/// <summary>
/// 设置关键字
/// </summary>
/// <param name="keywords">关键字列表</param>
public virtual void SetKeywords(ICollection<string> keywords)
{
_keywords = keywords.ToArray();
SetKeywords();
}
protected void SetKeywords()
{
var root = new TrieNode();
Dictionary<int, List<TrieNode>> allNodeLayers = new Dictionary<int, List<TrieNode>>();
for (int i = 0; i < _keywords.Length; i++) {
var p = _keywords[i];
var nd = root;
for (int j = 0; j < p.Length; j++) {
nd = nd.Add((char)p[j]);
if (nd.Layer == 0) {
nd.Layer = j + 1;
List<TrieNode> trieNodes;
if (allNodeLayers.TryGetValue(nd.Layer, out trieNodes) == false) {
trieNodes = new List<TrieNode>();
allNodeLayers[nd.Layer] = trieNodes;
}
trieNodes.Add(nd);
}
}
nd.SetResults(i);
}
List<TrieNode> allNode = new List<TrieNode>();
allNode.Add(root);
foreach (var trieNodes in allNodeLayers) {
foreach (var nd in trieNodes.Value) {
allNode.Add(nd);
}
}
allNodeLayers = null;
for (int i = 1; i < allNode.Count; i++) {
var nd = allNode[i];
nd.Index = i;
TrieNode r = nd.Parent.Failure;
char c = nd.Char;
后面还有 57 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
