2017-04-11 25 views
0

我想所以它是基於關閉下列字母改變字符串的排序:C#自定義排序字符串的IComparer

A,E,I,O,U,F,G,L,M,N,P ,S,T,V,H,K,R

而不是標準的A,B,C,d ... X,Y,Z

於是我開始嘗試並創建一個IComparer的,但被卡住如何實施。

這是我到目前爲止所得到的並不多。

public class CustomSort : IComparer<string> 
{ 
    public int Compare(string a, string b) 
    { 
     return 1; 
    } 
} 

任何幫助將不勝感激。

+4

當一些人有一個讓自己的生活變得複雜的好主意時,他應該學會自己解決他的問題,而不是把它們卸載給其他人。 – xanatos

+1

@xanatos它會出現SamoanProgrammer的指導者已經完成了前者,而SP正在試圖完成後者。 :roll: – ruffin

回答

2

它應該是非常喜歡這樣的:

在你的性格比較字符結束,找到Order字符串中的字符的「指標」。也許要加速它,你可以將Order字符串轉換爲Dictionary<char, int>,其中int是「重量」。

public class CustomSort : IComparer<string> 
{ 
    public const string Order = "AEIOUFGLMNPSTVHKR"; 

    public int Compare(string a, string b) 
    { 
     if (a == null) 
     { 
      return b == null ? 0 : -1; 
     } 

     if (b == null) 
     { 
      return 1; 
     } 

     int minLength = Math.Min(a.Length, b.Length); 

     for (int i = 0; i < minLength; i++) 
     { 
      int i1 = Order.IndexOf(a[i]); 
      int i2 = Order.IndexOf(b[i]); 

      if (i1 == -1) 
      { 
       throw new Exception(a); 
      } 

      if (i2 == -1) 
      { 
       throw new Exception(b); 
      } 

      int cmp = i1.CompareTo(i2); 

      if (cmp != 0) 
      { 
       return cmp; 
      } 
     } 

     return a.Length.CompareTo(b.Length); 
    } 
} 
+0

嗨xanatos,非常感謝。這已經完成了我需要做的:)真棒的工作夥伴! – SamoanProgrammer

+0

因此,比較「Hello There」和「HelloWorld」會引發異常,但比較「Hello There」和「Hello」不會。 – juharr

+0

@juharr是的:-)我沒有做整個字符串的正確性檢查。 – xanatos