【问题标题】:Custom sorting on special data column特殊数据列的自定义排序
【发布时间】:2013-04-02 15:06:50
【问题描述】:

我有一个数据集,我用一个名为4_Most_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 个项目将彼此相邻排序,因为它们都以相同的 2 个项目开头,但它们被转置了。底部的 3 个也将彼此相邻排序。

任何关于如何做到这一点的想法和/或 C# 中的代码 sn-p 将不胜感激。谢谢!

【问题讨论】:

  • 以 WPF 为目标,但 winform 也可以。谢谢!

标签: c#


【解决方案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
    }
}

完成后,您可以使用默认排序器对它们进行排序。

【讨论】:

  • 好的,非常感谢。在做一些进一步的研究时,我可能想要实现一些实现 IComparer 的类,因为我有不同的排序方式。感谢您让我从这里开始!
  • 没有问题。是的,IComparer 确实给了你更多的灵活性,所以这可能最适合你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多