【发布时间】:2016-11-05 12:46:08
【问题描述】:
我有以下列表:
var ips = new List<string> {
"192.168.5.1",
"192.168.0.2",
"192.168.0.3",
"192.168.0.4",
"192.168.1.1",
"192.168.1.2",
"192.168.1.3",
"192.168.1.4"
}.OrderBy(p => p.Ip);
貌似可以了,有没有必要写个自定义比较器,比如this one:
public class MyComparer : IComparer<string>
{
public int Compare(string x, string y)
{
int ip1 = IPAddress.Parse(x).ToInteger();
int ip2 = IPAddress.Parse(y).ToInteger();
return (((ip1 - ip2) >> 0x1F) | (int)((uint)(-(ip1 - ip2)) >> 0x1F));
}
}
【问题讨论】:
-
好的。现在你的问题是什么?
-
是的,118.168.5.1 1.198.6.7 是必须的。与此数据进行比较
-
.OprderBy(p => p)是正确的命令,它不需要任何自定义比较器。 -
在匿名函数中使用
IPAddress.Parse(x).ToInteger()。 -
@newbie 你能解释一下你为什么要比较,预期的结果是什么? (是否有必要编写自定义比较器) ...取决于您要比较的内容、方式、原因...
标签: c# iequalitycomparer