SuperObject(Delphi最好的JSON简析类) 扩展功能----排序(3)

简介: function TSuperAvlTree.Search(const k: SOString; st: TSuperAvlSearchTypes): TSuperAvlEntry;var  cmp, target_cmp: integer;  match_h, h: TSuperAvlEntry;  ha: Cardinal;begin  ha := TSuperAvlEntry.
function  TSuperAvlTree.Search( const  k: SOString; st: TSuperAvlSearchTypes): TSuperAvlEntry;
var
  cmp, target_cmp: integer;
  match_h, h: TSuperAvlEntry;
  ha: Cardinal;
begin
  ha :
=  TSuperAvlEntry.Hash(k);

  match_h :
=   nil ;

  h :
=  FRoot;



  
if  (stLess  in  st)  then
    target_cmp :
=   1   else
    
if  (stGreater  in  st)  then
      target_cmp :
=   - 1   else
      target_cmp :
=   0 ;

  
while  (h  <>   nil do
  
begin

            
//  modify by mofen
    
if  nowSortMode  =  sosmDefault  then
    
begin
      
// original code
      
if  h.FHash  <  ha  then  cmp : =   - 1   else
        
if  h.FHash  >  ha  then  cmp : =   1   else
          cmp :
=   0 ;
    
end   else
    
begin
      
//  modify by mofen
      cmp :
=  CompareForSortModeString(k, h.Name);
    
end ;
........

function  TSuperAvlTree.Delete( const  k: SOString): ISuperObject;
var
  depth, rm_depth: longint;
  branch: TSuperAvlBitArray;
  h, parent, child, path, rm, parent_rm: TSuperAvlEntry;
  cmp, cmp_shortened_sub_
with _path, reduced_depth, bf: integer;
  ha: Cardinal;
begin
  ha :
=  TSuperAvlEntry.Hash(k);
  cmp_shortened_sub_
with _path : =   0 ;
  branch :
=  [];

  depth :
=   0 ;
  h :
=  FRoot;
  parent :
=   nil ;
  
while  true  do
  
begin
    
if  (h  =   nil then
      exit;

    
//      if  h.FHash  <  ha  then  cmp : =   - 1   else
    
//        if  h.FHash  >  ha  then  cmp : =   1   else
    
//         cmp : =   0 ;

            
//  modify by mofen
    
if  nowSortMode  =  sosmDefault  then
    
begin
      
// original code
      
if  h.FHash  <  ha  then  cmp : =   - 1   else
        
if  h.FHash  >  ha  then  cmp : =   1   else
          cmp :
=   0 ;
    
end   else
    
begin
      
//  modify by mofen
      cmp :
=  CompareForSortModeString(k, h.Name);
    
end ;
.........

再经过修改Search和Delete后

经过测试基本都可以达到了,

唯一还有一个sosmAdd模式时,进行取值时取不到,

原因是在比较compare是,如果是sosmAdd时返回的结果都是1,就是向后查找,因为按Add模式排序时,在查找时并不能进行比较查找,而是需要查询所有的节点。

这样可想而知查询的速度势必有所影响。还没有仔细研究代码。sosmAdd还不能正常使用. 其他模式没有问题。

 

目录
相关文章
|
6月前
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
159 1
|
Web App开发
chrome扩展:manifest.json文件相关字段
chrome扩展:manifest.json文件相关字段
57 0
|
存储 JSON 安全
Python中数据类转换为JSON的方法
Python中数据类转换为JSON的方法
154 0
|
30天前
|
JSON 数据格式
用来返回Json数据格式的工具--通用类
用来返回Json数据格式的工具--通用类
17 1
|
3月前
|
JSON 图形学 数据格式
Json☀️ 一、认识Json是如何解析成类的
Json☀️ 一、认识Json是如何解析成类的
|
4月前
|
存储 JSON 测试技术
python中json和类对象的相互转化
针对python中类对象和json的相关转化问题, 本文介绍了4种方式,涉及了三个非常强大的python库jsonpickle、attrs和cattrs、pydantic,但是这些库的功能并未涉及太深。在工作中,遇到实际的问题时,可以根据这几种方法,灵活选取。 再回到结构化测试数据的构造,当需要对数据进行建模时,也就是赋予数据业务含义,pydantic应该是首选,目前(2024.7.1)来看,pydantic的生态非常活跃,各种基于pydantic的工具也非常多,建议尝试。
|
5月前
|
JSON 关系型数据库 MySQL
理解和利用MySQL中的JSON功能
理解和利用MySQL中的JSON功能
186 2
|
4月前
|
JSON 数据格式
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
|
5月前
|
存储 JSON 关系型数据库
MySQL JSON 类型:功能与应用
MySQL JSON 类型:功能与应用
|
5月前
|
JSON Java 数据格式
IDEA插件-JSON转java类
IDEA插件-JSON转java类
184 0
下一篇
无影云桌面