C#比较器按次值排序

C#比较器按次值排序,c#,comparator,string-comparison,C#,Comparator,String Comparison,我正在使用比较器对文本列表进行排序。每个列表项都包含纯文本: public class NameComparer : IComparer<string> { public int Compare(string x, string y) { if (x == null && y == null) return 0; if (x == null || y == null) retur

我正在使用比较器对文本列表进行排序。每个列表项都包含纯文本:

public class NameComparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            if (x == null && y == null) return 0;

            if (x == null || y == null) return -1;

            var parts1 = x.Split();
            var parts2 = y.Split();

            if (parts1.Length > 1 && parts2.Length > 1)
            {
                if (parts1[0] != parts2[0]) return parts1[0].CompareTo(parts2[0]);
                if (x.Contains("ptt") && y.Contains("ptt"))
                    return parts1[5].CompareTo(parts2[5]);
                else if (x.Contains("ptt"))
                    return parts1[5].CompareTo(parts2[11]);
                else if (y.Contains("ptt"))
                    return parts1[11].CompareTo(parts2[5]);
                else
                    return parts1[11].CompareTo(parts2[11]);
            }

            return x.CompareTo(y);
        }
    }
公共类名称比较器:IComparer
{
公共整数比较(字符串x、字符串y)
{
如果(x==null&&y==null)返回0;
如果(x==null | | y==null)返回-1;
var parts1=x.Split();
var parts2=y.Split();
如果(零件1.Length>1和零件2.Length>1)
{
如果(parts1[0]!=parts2[0])返回parts1[0]。比较(parts2[0]);
如果(x.Contains(“ptt”)&y.Contains(“ptt”))
返回部件1[5]。与(部件2[5])进行比较;
否则,如果(x.包含(“ptt”))
返回部件1[5]。与(部件2[11])进行比较;
否则,如果(y.包含(“ptt”))
返回部件1[11]。与(部件2[5])进行比较;
其他的
返回零件1[11]。与(零件2[11])进行比较;
}
返回x.CompareTo(y);
}
}
这个比较器排序很好,但我需要第二个排序。 例如 与此相反:

-  2045< start FC  79812 
 - 2027< Slot 4  start FC  79812 
 - 2048< Slot 4  start FC  79812
 - 2071< Slot 4  start FC  79812
 - 2070< Slot 4  start FC  79812
 - 2069< Slot 4  start FC  79812
 - 2045< Slot 5  end FC  79812
 - 2051< Slot 5  end FC  79812
 - 2056< Slot 5  end FC  79812
-2045
我需要它像这样排序:

-  2045< start FC  79812 
 - 2045< Slot 5  end FC  79812
 - 2027< Slot 4  start FC  79812 
 - 2048< Slot 4  start FC  79812
 - 2071< Slot 4  start FC  79812
 - 2070< Slot 4  start FC  79812
 - 2069< Slot 4  start FC  79812
 - 2051< Slot 5  end FC  79812
 - 2056< Slot 5  end FC  79812
-2045

在'fc'之后的数字之后,我需要按照'fc'之前的数字进行排序。如果主要比较为零,则只应进行二次比较,如果不是零,则不应进行二次比较,因此您的最后一句话似乎不正确。动态解析字符串不是很有效,因为您使用的是split-它生成字符串数组,请考虑使用一个类来表示数据的结构,并为每个部分提供文件,然后比较算法将是非常干净的。主/次排序是直接的:(1)比较主键。如果返回非零,则返回该值。(2) 否则,返回比较次键的结果。