本文介绍了Linq/Lambda OrderBy委托List< string> IP地址数量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出List<string> ips = new List<string>();
我需要按逻辑顺序对IP地址列表进行排序(即,"192.168.0.2"位于"192.168.0.100"之前).
I need to sort the list of IP addresses in a logical order (i.e. "192.168.0.2" comes before "192.168.0.100").
当前(如果正确,则按字母顺序)包含以下内容:
Currently (and correctly, alphabetically) if the list contains:
192.168.0.1
192.168.0.2
192.168.0.10
192.168.0.200
ips.OrderBy(p => p)
返回:
192.168.0.1
192.168.0.10
192.168.0.2
192.168.0.200
推荐答案
您需要创建一个比较器:(已测试)
You need to make a comparer: (Tested)
class IPComparer : IComparer<string> {
public int Compare(string a, string b) {
return Enumerable.Zip(a.Split('.'), b.Split('.'),
(x, y) => int.Parse(x).CompareTo(int.Parse(y)))
.FirstOrDefault(i => i != 0);
}
}
然后您可以编写
ips.OrderBy(p => p, new IPComparer())
这篇关于Linq/Lambda OrderBy委托List< string> IP地址数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!