天天看點

SuperObject(Delphi最好的JSON簡析類) 擴充功能----排序(1)

一直有個想法。SuperObject這麼好用的Json簡析類,序列化出來的Json排序是亂的。

有時候想用SuperObject做儲存樹資料。這樣一來排序都是亂亂的也就放棄了,這幾天想改造一下SuperObject類。

将改造過程記下。以便以後查閱。

最初想法

增加ISuperObject屬性SortMode:Integer排序方式(0:預設方式, 1:添加順序, 2:升序)

缺點:

因為每個值都是一個TSuperObject對象。如果每個TSuperObject添加SortMode屬性, 考慮的地方太多。

開始認為預設的方式是安裝降序排列的,後來深入代碼發現通過下面的方法計算key的值再進行比較得出進行排序。

class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;

var

  h: cardinal;

  i: Integer;

  s: string;

begin

  h := 0;

  //modify mofen  without case

  s := LowerCase(k);

  for i := 1 to Length(s) do

  begin

    //origial

    h := h * 129 + ord(s[i]) + $9E370001;

    //h := h + ord(s[i]) * (1 shl (i * 3));

  end;

  Result := h;

end;

從上面代碼可以看出如果字母多,肯定比字母計算出來的Hash值要大。

--此方案不妥