Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 特殊数据列上的自定义排序_C# - Fatal编程技术网

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
确实给了您更多的灵活性,所以这可能是最适合您的。