2016-11-05 8 views
0

のカスタム比較子を使用:私はリストを以下している文字列

var ips = new List<string> { 
    "192.168.5.1", 
    "192.168.0.2", 
    "192.168.0.3", 
    "192.168.0.4", 
    "192.168.1.1", 
    "192.168.1.2", 
    "192.168.1.3", 
    "192.168.1.4" 
}.OrderBy(p => p.Ip); 

それが動作するように見え、それはthis oneようなカスタム比較子を書き込む必要があり:

public class MyComparer : IComparer<string> 
{ 
     public int Compare(string x, string y) 
     { 
      int ip1 = IPAddress.Parse(x).ToInteger(); 
      int ip2 = IPAddress.Parse(y).ToInteger(); 
      return (((ip1 - ip2) >> 0x1F) | (int)((uint)(-(ip1 - ip2)) >> 0x1F)); 
     } 
} 
+0

OKです。今あなたの質問は何ですか? –

+0

はい、必要です118.168.5.1 1.198.6.7。このデータと比較してください。 –

+0

'.OprderBy(p => p)'は正しいコマンドであり、カスタム比較者は必要ありません。 –

答えて

0

この例を試してみてください。

192.168.0.1 
192.168.0.2 
192.168.0.10 
192.168.0.200 

OrderByを適用すると、この結果が得られます。

192.168.0.1 
192.168.0.10 
192.168.0.2 
192.168.0.200 

したがって、以下の例のように独自のカスタム比較機能を作成する必要があります。

https://stackoverflow.com/a/4785462/6527049

関連する問題