比较GUID所以我可以按GUID排序

时间:2009-12-05 02:02:50

标签: delphi sorting guid

对GUID列表进行排序(如TGuid)的快捷方式是什么。我以为我只是使用SysUtils.CompareMem(P1,P2:指针;长度:整数):布尔值;直到我意识到它返回布尔值。

我希望与CompareText()或CompareValue()类似的东西返回整数,以便它可以用于排序比较。

我想没有多少人希望对GUID进行排序......任何想法?

我想我可以调用对TGuid记录的内容进行一些级联调用CompareValue()。我的直觉告诉我必须有更好的方法!

谢谢你!

4 个答案:

答案 0 :(得分:14)

如果您使用的是Delphi 2009或更高版本,则可以使用Generics.Defaults部门中的TComparer<TGUID>.Compare()或其调用的BinaryCompare函数。

答案 1 :(得分:2)

我不知道Delphi,但通常GUID是128-bit hexadecimal string,您可以将子元素转换/解析为无符号(4 * 4字节或2 * 8字节)整数,然后比较它们。完成该功能后,只需应用标准排序算法。

如果我的答案不满足GUID specification的RFC,那么您可以提出更好的方法来排序提取GUID中的位级数据。

答案 2 :(得分:0)

使用GUIDToString并对其执行CompareStr - 不是最快的选项,但它可以正常工作。

答案 3 :(得分:-3)

Function CompareGUIDS( pvGUID1, pvGUID2 : TGUID ) : Boolean;
 Begin
   If ( pvGUID1.D1    = pvGUID2.D1 )    And
      ( pvGUID1.D2    = pvGUID2.D2 )    And
      ( pvGUID1.D3    = pvGUID2.D3 )    And
      ( pvGUID1.D4[ 0 ] = pvGUID2.D4[ 0 ] ) And
      ( pvGUID1.D4[ 1 ] = pvGUID2.D4[ 1 ] ) And
      ( pvGUID1.D4[ 2 ] = pvGUID2.D4[ 2 ] ) And
      ( pvGUID1.D4[ 3 ] = pvGUID2.D4[ 3 ] ) And
      ( pvGUID1.D4[ 4 ] = pvGUID2.D4[ 4 ] ) And
      ( pvGUID1.D4[ 5 ] = pvGUID2.D4[ 5 ] ) And
      ( pvGUID1.D4[ 6 ] = pvGUID2.D4[ 6 ] ) And
      ( pvGUID1.D4[ 7 ] = pvGUID2.D4[ 7 ] ) Then
      Result := True
   Else
      Result := False;
 End;