如何将两个GUID排序为最低优先级

本文关键字:排序 GUID 优先级 两个 | 更新日期: 2023-09-27 18:20:01

我有两个GUID-guid1&guid2.我想把它们组合成一个guid,先订购最低的一个。

所以我会做:

if(Guid1.Length != Guid2.Length)
{
    if (Guid1.Length > Guid2.Length)
        return Guid2 + Guid1;
    else
        return Guid1 + Guid2;
}
else
{
    var isDiff = true;
    var index = Guid1.Length - 1;
    while(isDiff)
    {
        if (index < 0) // same guids
            return Guid1 + Guid2;
        if(Guid1[index] == Guid2[index])
        {
            index--;
        }
        else
        {
            // Here stuck
        }
    }
}

在注释部分,我想检查每个字符是数字还是字母,找出哪个是最低的,然后连接并首先返回具有最低值的字符串。

示例:

guid1="ab12";guid2="a21c";

因此,我认为每个字符串都可以转换为ASCII等价字符,然后找到最低值。

例如,返回的字符串为:

guid1+guid2="ab12a21c"

因为第二个字符的十进制值是32(对于数字2)和98(对于b)。

这是最好的方法吗?如果是,我如何在c#中转换为ASCII?

如何将两个GUID排序为最低优先级

所有Guid都具有相同的长度。您也可以使用CompareTo方法,如下例所示。

using System;
namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Guid g1 = Guid.Parse("c47632a3-274b-44d0-93df-f9626a033a6f");
        Guid g2 = Guid.Parse("c47632a3-274b-43d0-93df-f9626a033a6f");
        Console.WriteLine(g1);
        Console.WriteLine(g2);
        Console.WriteLine(GetResult(g1,g2));
        Console.ReadLine();
    }
    public static string GetResult(Guid Guid1, Guid Guid2)
    {
        return Guid1.CompareTo(Guid2) < 0 ? Guid1.ToString() + Guid2.ToString() : Guid2.ToString() + Guid1.ToString();
    }
}
}

在上面的例子中,g2是第一位的
如果将"43d0"更改为"45d0",g1将优先出现
这不是你需要的吗?