如何对一组 IP 地址 进行排序?

咨询区

  • Cracker

我有一组如下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

回答区

  • Alex Aza

对 ip 地址进行排序,大概有三种方法。

  1. 使用 Version.Parse

这种方式最简单粗暴,也最有意思,参考代码如下:

        static void Main(string[] args)
        {
            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();

            sortedIps.ForEach(k => Console.WriteLine(k));
        }

输出结果:

  1. 将ip转int

字符串ip是无法进行有效排序的,但可以将其转为 int 处理,比如下面这样:

69.52.220.44 =>

69 * 255 * 255 * 255 +
52 * 255 * 255 +
220 * 255 +
44

  1. 3位填充法

先将IP地址切开,然后将不足三位的部分填充 0 ,这样就方便直接对 string 进行排序,最后再拼接起来,参考如下代码:

public static class StringHelper
{
    public static string IpAddressLabel(string ipAddress)
        => string.Join(".", ipAddress.Split('.').Select(part => part.PadLeft(3, '0')));
}

接下来简单测试下。

 => new[] {"192.168.1.100", "192.168.1.1", "192.168.1.19"}
      .OrderBy(ip => StringHelper.IpAddressLabel(ip));

点评区

这三种对 IP 排序的方法有点意思,学习了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值