Как отсортировать список адресов Ip с помощью С#
У меня есть список IP-адресов следующим образом
192.168.1.5
69.52.220.44
10.152.16.23
192.168.3.10
192.168.1.4
192.168.2.1
Я ищу такой способ сортировки этого списка в соответствии с порядком ниже
10.152.16.23
69.52.220.44
192.168.1.4
192.168.1.5
192.168.2.1
Ответы
Ответ 1
Это может выглядеть как взломать, но оно делает именно то, что вам нужно:
var unsortedIps =
new[]
{
"192.168.1.4",
"192.168.1.5",
"192.168.2.1",
"10.152.16.23",
"69.52.220.44"
};
var sortedIps = unsortedIps
.Select(Version.Parse)
.OrderBy(arg => arg)
.Select(arg => arg.ToString())
.ToList();
Ответ 2
Вы можете преобразовать каждый IP-адрес в целое число, подобное этому...
69.52.220.44 =>
69 * 255 * 255 * 255 +
52 * 255 * 255 +
220 * 255 +
44
Затем сортируйте по целочисленному представлению.
Ответ 3
Вы также можете найти эту функцию.
public static class ExtensionMethods
{
public static int CompareTo(this IPAddress x, IPAddress y)
{
var result = x.AddressFamily.CompareTo(y.AddressFamily);
if (result != 0)
return result;
var xBytes = x.GetAddressBytes();
var yBytes = y.GetAddressBytes();
var octets = Math.Min(xBytes.Length, yBytes.Length);
for (var i = 0; i < octets; i++)
{
var octetResult = xBytes[i].CompareTo(yBytes[i]);
if (octetResult != 0)
return octetResult;
}
return 0;
}
}