代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Kern

在.NET中使用参数对自定义对象进行排序?

  •  0
  • Jeffrey Kern  · 技术社区  · 14 年前

    有没有什么东西我可以把这些东西分类,比如

    list<of foo>.sort()
    

    并且能够用一个可通过的参数对这个列表进行排序。哪种会影响排序?

    list<of foo>.sort(pValue)
    

    我想我需要定义两种不同的分类,但我不确定。

    编辑:使用内置列表。对象的排序方式取决于是否传递参数。我可以使用一个全局变量来进行排序,但这会导致错误的bac代码:p

    7 回复  |  直到 14 年前
        1
  •  1
  •   jdmichal    14 年前

    // Sorting ints based on natural order:
    List<Int32> ints = GetInts();
    ints.Sort((lhs, rhs) => lhs.Compare(rhs));
    
    // Sorting Foo objects based on some computation:
    List<Foo> foos = GetFoos();
    foos.Sort((lhs, rhs) => lhs.Compute(pValue).Compare(rhs.Compute(pValue)));
    
        2
  •  2
  •   Justin Niessner    14 年前

    如果你是定义 Sort() 方法,那么是的。

    在C#(或者在VB.NET中使用可选参数)中重载Sort()方法非常容易。

    如果你说的是 List.Sort()

        3
  •  2
  •   Romano Zumbé Ajay Jain    7 年前

    你应该试试

    list<of foo>.OrderBy( .... )
    

    在OrderBy中,可以使用lambda表达式通过参数和排序顺序来控制排序算法

        4
  •  1
  •   simendsjo    14 年前
        5
  •  0
  •   abatishchev Karl Johan    14 年前

    public static void Sort(this List<Foo> list, Bar param)
    {
       // your sorting algorithm
    }
    

    用法:

    var list = new List<Foo>();
    list.Add(new Foo());
    list.Sort(); // standard algorithm
    list.Sort(new Bar()); // your own algorithm
    
        6
  •  0
  •   Coincoin    14 年前

    您有三个选择:

    • 正在排序的类可以实现 IComparable
    • IComparer<of foo> 并在调用时使用它的实例 sort() .
    • 您可以创建一个比较两个 foo 排序()

    比较器的优点是,您可以更容易地将其参数化,因为您可以创建一个实例,并且可以在使用之前设置其中的任何属性。缺点是必须创建一个单独的类。

        7
  •  0
  •   Matt Weldon    14 年前

    如前所述,您应该看看如何实现 IComparable 对象上的接口。然后可以创建一个新类来实现 IComparer 它将用于控制要应用的排序。这里有几篇好文章 here here