Подтвердить что ты не робот

Как отсортировать список адресов 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
4b9b3361

Ответ 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;
  }
}