2014-08-30 55 views
0

我有2個GUID - guid1 & guid2。我想通過先訂購最低價格將它們合併爲一個GUID。如何訂購兩個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?

+0

你對「最低」的定義是什麼? – 2014-08-30 13:11:44

+1

此外,它似乎你的「guid」是一個字符串。爲什麼不使用['Guid'](http://msdn.microsoft.com/zh-cn/library/system.guid%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang= csharp#code-snippet-1)結構呢?然後你可以更容易地比較它們,只需選擇較低的那個(該結構實現'IComparable') – 2014-08-30 13:15:45

+0

@HonzaBrestan如果我沒有弄錯我的用戶由MVC Identity生成的ID是DB中的字符串。我會仔細檢查一下。 – user2330270 2014-08-30 13:18:51

回答

2

所有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會先到達
這不是您需要的嗎?

+0

正是我需要的,謝謝! – user2330270 2014-08-30 13:29:23

相關問題