【问题标题】:Using custom comparer for strings [duplicate]对字符串使用自定义比较器[重复]
【发布时间】: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 =&gt; p) 是正确的命令,它不需要任何自定义比较器。
  • 在匿名函数中使用IPAddress.Parse(x).ToInteger()
  • @newbie 你能解释一下你为什么要比较,预期的结果是什么? (是否有必要编写自定义比较器) ...取决于您要比较的内容、方式、原因...

标签: c# iequalitycomparer


【解决方案1】:

试试这个例子。

192.168.0.1
192.168.0.2
192.168.0.10
192.168.0.200

如果你申请OrderBy,它会给你这个结果。

192.168.0.1
192.168.0.10
192.168.0.2
192.168.0.200

因此,您必须像下面的示例一样制作自己的自定义比较器。

https://stackoverflow.com/a/4785462/6527049

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 2021-09-23
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2011-03-25
    相关资源
    最近更新 更多