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

在.NET中使用参数对自定义对象进行排序?,.net,list,object,sorting,.net,List,Object,Sorting,假设我有一个自定义的Foo对象 有没有我可以通过这些对象的列表进行排序,比如 list<of foo>.sort() list.sort() 还可以使用一个可通过的参数对该列表进行排序。哪一个会影响排序 list<of foo>.sort(pValue) list.sort(pValue) 我猜我需要定义两个不同的类别,但我不确定 编辑:使用内置列表。对象的排序方式取决于是否传递参数。我可以使用一个全局变量并将其用于排序,但这会产生错误的bac代码:p如果您是定义

假设我有一个自定义的Foo对象

有没有我可以通过这些对象的列表进行排序,比如

list<of foo>.sort()
list.sort()
还可以使用一个可通过的参数对该列表进行排序。哪一个会影响排序

list<of foo>.sort(pValue)
list.sort(pValue)
我猜我需要定义两个不同的类别,但我不确定


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

如果您是定义
Sort()
方法的人,那么是的

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


如果您谈论的是烘焙到框架中的
List.Sort()
,那么我不确定您想要做什么,您需要提供更多细节。

如果您是定义
Sort()
方法的人,那么是的

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

如果您谈论的是烘焙到框架中的
List.Sort()
,那么我不确定您想要做什么,您需要提供更多细节。

声明(作为扩展方法):

公共静态无效排序(此列表,Bar参数)
{
//你的排序算法
}
用法:

var list = new List<Foo>();
list.Add(new Foo());
list.Sort(); // standard algorithm
list.Sort(new Bar()); // your own algorithm
var list=newlist();
添加(新的Foo());
list.Sort();//标准算法
list.Sort(新条());//你自己的算法
声明(作为扩展方法):

公共静态无效排序(此列表,Bar参数)
{
//你的排序算法
}
用法:

var list = new List<Foo>();
list.Add(new Foo());
list.Sort(); // standard algorithm
list.Sort(new Bar()); // your own algorithm
var list=newlist();
添加(新的Foo());
list.Sort();//标准算法
list.Sort(新条());//你自己的算法
看一看和

看一看和

这在C#中相当容易。只需为两者创建lambda函数,就可以在lambda函数中正确指定参数。我知道VB支持扩展方法,但我不确定lambda函数

// 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)));
//根据自然顺序对整数进行排序:
List ints=GetInts();
整数排序((左,右)=>lhs.Compare(右));
//基于某些计算对Foo对象进行排序:
List foos=GetFoos();
排序((lhs,rhs)=>lhs.Compute(pValue).Compare(rhs.Compute(pValue));
这在C#中相当容易。只需为两者创建lambda函数,就可以在lambda函数中正确指定参数。我知道VB支持扩展方法,但我不确定lambda函数

// 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)));
//根据自然顺序对整数进行排序:
List ints=GetInts();
整数排序((左,右)=>lhs.Compare(右));
//基于某些计算对Foo对象进行排序:
List foos=GetFoos();
排序((lhs,rhs)=>lhs.Compute(pValue).Compare(rhs.Compute(pValue));

您有三种选择:

  • 正在排序的类可以实现
    IComparable
  • 您可以实现一个
    IComparer
    ,并在调用
    sort()
    时使用它的实例
  • 您可以创建一个比较两个
    foo
    对象的函数,并在调用
    sort()
    时使用该函数
比较器的优点是,您可以更轻松地对其进行参数化,因为您创建了一个实例,并且可以在使用之前设置其中的任何属性。缺点是必须创建一个单独的类


如果要将比较参数化,委托的使用更简单,但干净程度稍低。

您有三种选择:

  • 正在排序的类可以实现
    IComparable
  • 您可以实现一个
    IComparer
    ,并在调用
    sort()
    时使用它的实例
  • 您可以创建一个比较两个
    foo
    对象的函数,并在调用
    sort()
    时使用该函数
比较器的优点是,您可以更轻松地对其进行参数化,因为您创建了一个实例,并且可以在使用之前设置其中的任何属性。缺点是必须创建一个单独的类

委托使用起来更简单,但如果您想参数化比较,它就不那么干净了。

您应该试试

list<of foo>.OrderBy( .... )
list.OrderBy(…)
在OrderBy中,您可以使用lambda表达式通过参数和排序顺序控制排序算法,您应该尝试

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

在OrderBy中,您可以使用lambda表达式通过参数和排序顺序来控制排序算法,如前所述,您应该看看如何在对象上实现接口。然后,您可以创建一个新类来实现,该类将用于控制要应用的排序。有几篇好文章可以让您开始学习。

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

您的参数将做什么?它将如何影响排序算法?我需要进行全局和局部排序。全局排序将给我一个按重要性降序排列的对象列表。从这一点开始,我将取前64个,并按照Y值的顺序对它们进行排序,同时传入Y值。我需要为240个y值(0-239)设置此列表。您的参数将做什么?它将如何影响排序算法?我需要进行全局和局部排序。全局排序将给我一个按重要性降序排列的对象列表。从这一点开始,我将取前64个,并按照Y值的顺序对它们进行排序,同时传入Y值。我需要将这个列表设置为240个y值(0-239)以覆盖
Sort()
您必须定义自己的
list
,即
傻瓜:列表,其中T:Foo{}
@