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) 否则,返回比较次键的结果。