2016-11-05 9 views
0

Я следующий список:Использование пользовательских Comparer для строк

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