用于对象排序的多功能属性引用

时间:2015-03-27 00:55:51

标签: c# sorting

我面临一些难题,当我在Google和StackOverflow上提问时,我无法描述我的想法,所以如果标题令人困惑,请原谅我!

所以,我的想法是建立一个名为"排序"它以方法的形式包含多个不同的排序算法...我已经设计了一种方法来根据它们是字符串,整数,双重等来对值进行排序,而不必为每个重新键入新的排序,但我正在努力实现排序因为:

我要排序的对象列表,名为" Stock"包含很多不同的属性,程序需要能够对其进行排序,例如日期,日期等。我的目标是不必为每个属性重新编写排序,而是告诉Sort看哪个属性查看列表中的每个对象...如果这有意义?

Heres my" psuedo"想法:

Stock[] stocksList;
Sort sort = new Sort();

stocksList = sort.Sort(sort.SortType.Bubble, stocksList, property);

其中SortType.Bubble是一个枚举器值,用于确定要执行的排序类型,property是要在每个stocksList项中使用的属性名...

然后在" sort.Sort"方法,我希望能够说:

for (int i = 0; i < stocksList.Length; i++)
{
    if (stocksList[i].property > stocksList[i + 1].property);
    {
        // Swap stocksList objects.
    }
}

据我所知,这是不可能的,但我希望有人可以证明我错了吗?

谢谢, 利安

编辑:我知道有可能只传递要分析的属性数组,以及对象列表......但这意味着每个数组都会交换两个数组中的值,这基本上会降低算法的效率

1 个答案:

答案 0 :(得分:0)

你正在这样复杂化。使用linq方法orderby并传入密钥。

https://msdn.microsoft.com/en-us/library/vstudio/bb534966%28v=vs.100%29.aspx

SomeCollection.OrderBy((x) => x.someproperty);

如果您真的需要更多控制,请在您需要的地方实施icomparer,您可以控制比较的完成方式。有一个orderBy超载需要一个。