如何使用c#对Ip地址列表进行排序

Cra*_*ker 20 .net c# string list ip-address

我有一个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
Run Code Online (Sandbox Code Playgroud)

我正在寻找这种方法来排序这个列表以匹配下面的顺序

10.152.16.23
69.52.220.44
192.168.1.4
192.168.1.5
192.168.2.1
Run Code Online (Sandbox Code Playgroud)

Ale*_*Aza 49

这可能看起来像黑客,但它完全符合您的需求:

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();
Run Code Online (Sandbox Code Playgroud)

  • @Norbert-请先声明代码。我实际上在发布之前检查了结果。 (3认同)
  • 那是一种狡猾的方法! (2认同)
  • 我有一个 `List<IPAddress>` 并将其排序如下: `lstIp = lstIp.OrderBy(i => new Version(i.ToString())).ToList();` (2认同)

Col*_*inE 10

您可以将每个IP地址转换为如此整数...

69.52.220.44 =>

69 * 255 * 255 * 255 +
52 * 255 * 255 +
220 * 255 +
44
Run Code Online (Sandbox Code Playgroud)

然后按整数表示排序.

  • 通过该计算,“0.0.0.255”与“0.0.1.0”具有相同的值,它们应该不同。乘数应该是256,而不是255。参见维基百科:“例如,四点的IP地址192.0.2.235代表32位十进制数3221226219”。`192.0.2.235` => `192*256*256*256 + 2*256 + 235` = 3221226219 确实,如果你使用上面的公式,你会得到 `192*255*255*255 + 2*255 + 2356`247 (3认同)