对GUID列表进行排序(如TGuid)的快捷方式是什么。我以为我只是使用SysUtils.CompareMem(P1,P2:指针;长度:整数):布尔值;直到我意识到它返回布尔值。
我希望与CompareText()或CompareValue()类似的东西返回整数,以便它可以用于排序比较。
我想没有多少人希望对GUID进行排序......任何想法?
我想我可以调用对TGuid记录的内容进行一些级联调用CompareValue()。我的直觉告诉我必须有更好的方法!
谢谢你!答案 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;