C# 特殊数据列上的自定义排序
我有一个数据集,我正在显示一个特殊的列,C# 特殊数据列上的自定义排序,c#,C#,我有一个数据集,我正在显示一个特殊的列,4\u Most\u Previlent。它的数据类型是字符串,具有以下格式:Item1-Item2-Item3-Item4 以下是此列的一些值的示例: Cl-K-Be-Li K-Cl-He-O Cu-Mn-Ca-Cl Cr-Cu-Mn-Cu Cu-Cr-Mn-Cu Cr-Cu-Ca-S 我喜欢根据本专栏定制项目,您可以说第一个和第二个元素需要相同,但可以互换。所以它就像AB | CD或BA | CD。因此,在我上面的例子中,前两个项目将被排列在一起,因
4\u Most\u Previlent
。它的数据类型是字符串,具有以下格式:Item1-Item2-Item3-Item4
以下是此列的一些值的示例:
Cl-K-Be-Li
K-Cl-He-O
Cu-Mn-Ca-Cl
Cr-Cu-Mn-Cu
Cu-Cr-Mn-Cu
Cr-Cu-Ca-S
我喜欢根据本专栏定制项目,您可以说第一个和第二个元素需要相同,但可以互换。所以它就像AB | CD或BA | CD。因此,在我上面的例子中,前两个项目将被排列在一起,因为它们都以相同的2个项目开始,但它们是转置的。另外,底部的3个将被排列在一起
如果您有任何关于如何使用C#进行此操作和/或编写代码片段的想法,将不胜感激。谢谢 我将字符串包装在类中,然后您可以根据需要自由实现
IComparable
例如:
class SomeRecord : IComparable<SomeRecord> {
public SomeRecord(string line) {
string[] fields = line.Split('-');
Item1 = fields[0];
Item2 = fields[1];
Item3 = fields[2];
Item4 = fields[3];
}
public string Item1 { get;set; }
public string Item2 { get;set; }
public string Item3 { get;set; }
public string Item4 { get;set; }
int IComparable<SomeRecord>.CompareTo(SomeRecord other) {
// implement your custom logic here, returning -1, 0, or 1
}
}
class SomeRecord:i可比较{
公共记录(字符串行){
string[]fields=line.Split('-');
Item1=字段[0];
Item2=字段[1];
Item3=字段[2];
Item4=字段[3];
}
公共字符串Item1{get;set;}
公共字符串Item2{get;set;}
公共字符串Item3{get;set;}
公共字符串Item4{get;set;}
int IComparable.CompareTo(SomeRecord-other){
//在这里实现自定义逻辑,返回-1、0或1
}
}
一旦这样做,您就可以使用默认的排序器对它们进行排序。我将把字符串包装在一个类中,然后您就可以根据需要自由地实现
IComparable
例如:
class SomeRecord : IComparable<SomeRecord> {
public SomeRecord(string line) {
string[] fields = line.Split('-');
Item1 = fields[0];
Item2 = fields[1];
Item3 = fields[2];
Item4 = fields[3];
}
public string Item1 { get;set; }
public string Item2 { get;set; }
public string Item3 { get;set; }
public string Item4 { get;set; }
int IComparable<SomeRecord>.CompareTo(SomeRecord other) {
// implement your custom logic here, returning -1, 0, or 1
}
}
class SomeRecord:i可比较{
公共记录(字符串行){
string[]fields=line.Split('-');
Item1=字段[0];
Item2=字段[1];
Item3=字段[2];
Item4=字段[3];
}
公共字符串Item1{get;set;}
公共字符串Item2{get;set;}
公共字符串Item3{get;set;}
公共字符串Item4{get;set;}
int IComparable.CompareTo(SomeRecord-other){
//在这里实现自定义逻辑,返回-1、0或1
}
}
一旦这样做,您就可以使用默认的排序器对它们进行排序。以WPF为目标,但winform也可以。谢谢以WPF为目标,但winform也可以。谢谢好的,非常感谢。在做进一步的研究时,我可能想实现一些实现IComparer的类,因为我有不同的排序方法。谢谢你让我从这里开始!没问题。是的,
IComparer
确实给了您更多的灵活性,所以这可能是最适合您的。好的,非常感谢。在做进一步的研究时,我可能想实现一些实现IComparer的类,因为我有不同的排序方法。谢谢你让我从这里开始!没问题。是的,IComparer
确实给了您更多的灵活性,所以这可能是最适合您的。