【发布时间】:2014-10-23 15:19:58
【问题描述】:
我有一个列表,它包含 4 个对象。它可能包含更少或更多,但始终是 2 的倍数,即 2、4、6、8、10 等
在我的具体情况下,我里面有 4 个对象,但它们必须成对处理,我需要按它们排序。
我需要订购可以具有 1 或 2 值的类型。我确实尝试过,但它一个接一个地订购了每个对象,它们必须成对保留。
因此,前 2 个对象彼此属于,我想将这 2 个对象排序在一起,然后其他 2 个对象彼此属于,我想将这 2 个对象排序在一起。
这是一个例子。
Name: Apple
Type: 2
Name: Orange
Type: 1
Name: Pear
Type: 2
Name: Peach
Type: 1
当我想获得一个这样的列表。请注意,橙色和苹果已经改变了位置,因为对这对进行了排序。梨和桃也是如此。
Name: Orange
Type: 1
Name: Apple
Type: 2
Name: Peach
Type: 1
Name: Pear
Type: 2
这是我的例子,这当然是错误的。
我已经尝试了很多方法,但当然我一直在得到,首先是 1,然后是 2,因为它没有考虑到我想成对排序。
var wrongSort = myList.Select(x => x.Items).OrderBy(x => x.Type).ToList();
当然,“myList”是一个标准集合,里面是一个项目列表。项目列表是我想要成对订购的。
编辑
关于使用元组,这可以工作,但列表作为标准集合传递给我,最后我仍然需要一个标准列表。元组在这里真的行不通。
集合用于foreach 迭代,因此顺序很重要。
【问题讨论】:
-
如果它们是成对的,你为什么不把这两个项目放在一个包装里呢?所以你可以有一个 FruitPair 类或使用一个 Tuple 如果这对你来说更容易的话。
-
List 没有作为元组返回给我,最后我仍然需要一个标准集合。但我需要对 2 x 2 进行排序。如果有意义的话。
-
我拥有的列表是我拥有的完美格式,但顺序错误。该列表正在 foreach 的迭代中使用。
-
@Martin 不,它的格式不完美。如果有人以如此难以管理的格式向您提供这些数据,您应该花时间将其解析为真实类型,然后然后您可以担心对其进行排序。
-
我不知道你为什么觉得使用新类型会阻止你使用 foreach 循环或以后对数据做任何你想做的事情。
标签: c# linq linq-to-objects