咨询区
Cracker
我有一组如下IP地址。
软谋的.NET全套架构视频,大多视频包含源码,录制时间(初中级是2019~2020高级架构是2020~2021),原价6499,现仅需299元。这个活动周三推出后,受到热捧,仅一个技术群就几十人抢购!最后几天活动,目录和介绍:点击下方超链接查看 需要的加微zls20210502,进技术群的加微mm1552923,备注进群 |
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 地址进行排序,大概有三种方法。
使用
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));
}
输出结果:
将ip转int
字符串ip是无法进行有效排序的,但可以将其转为 int
处理,比如下面这样:
69.52.220.44 =>
69 * 255 * 255 * 255 +
52 * 255 * 255 +
220 * 255 +
44
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 排序的方法有点意思,学习了。
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全