本文介绍了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&lt; string&gt; IP地址数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 02:25