Home

Awesome

BTFindTree

此项目为 Leo 项目中的高效查找数据结构,使用二分+桶的方式优化查找性能。

使用场景

为了动态构建高性能查找‘字典’所提供的算法,可以结合 Natasha 创建出无锁高并发的键值对查找功能。 性能好于并发字典,在高频访问场景下比较有用。

具体算法

使用方法

使用前提:

了解并发字典的使用方法。


var dict = Dictionary<T,string>();
dict["a"] = "return 1;";
dict["abc"] = "return 2;";  

var script = BTFTemplate.GetCustomerBTFScript(dict,"arg.GetHashCode()",item=>item.GetHashCode().ToString())+"return default;";  
以上便构建了一段完整的利用HashCode查找的方法体。
//如switch(arg.GetHashCode()){ case 28273847: xxx }
//其中case 28273847 是由 GetCustomerBTFScript 第三个参数,Func<TKey,string> 委托得到的。

  
    //Key :   可以为任意类型,因为真正用到T的是它的HashCode
    //value:  比如是字符串; return 1;/ Action(a); / a=1; 等正常代码字符串。
    //        作用是当用户传入 key 的时候执行 value.
    
    var dict = Dictionary<T,string>();
    dict["a"] = "return 1;";
    dict["abc"] = "return 2;";
    string result = BTFTemplate.GetHashBTFScript( dict );
    
    //拿到 result 使用 natasha 构造。
    //例如:HashDelegate = NDomain.Random().UnsafeFunc<string, int>(BTFTemplate.GetHashBTFScript(ScriptDict) + "return default;");
    
  
    //Key :   必须是字串,因为模糊树和最小权都是针对字串的一种算法结构
    //value:  比如是字符串; return 1;/ Action(a); / a=1; 等正常代码字符串。
    //        作用是当用户传入 key 的时候执行 value.
    
    var dict = Dictionary<string,string>();
    dict["a"] = "return 1;";
    dict["abc"] = "return 2;";
    string result = BTFTemplate.GetGroupFuzzyPointBTFScript( dict );
    
    //拿到 result 使用 natasha 构造。
    //例如:HashDelegate = NDomain.Random().UnsafeFunc<string, int>(BTFTemplate.GetFuzzyPointBTFScript(ScriptDict) + "return default;");
    
  
    //Key :   必须是字串,因为模糊树和最小权都是针对字串的一种算法结构
    //value:  比如是字符串; return 1;/ Action(a); / a=1; 等正常代码字符串。
    //        作用是当用户传入 key 的时候执行 value.
    
    var dict = Dictionary<string,string>();
    dict["a"] = "return 1;";
    dict["abc"] = "return 2;";
    string result = BTFTemplate.GetGroupPrecisionPointBTFScript( dict );
    
    //拿到 result 使用 natasha 构造。
    //例如:HashDelegate = NDomain.Random().UnsafeFunc<string, int>(BTFTemplate.GetPrecisionPointBTFScript(ScriptDict) + "return default;");