如何订购2的副本

本文关键字:副本 何订购 | 更新日期: 2023-09-27 18:27:45

我有一个List,它包含4个对象。它可以包含更少或更多,但总是2的倍数,即2、4、6、8、10等

在我的特定情况下,我有4个对象,但它们必须成对处理,我需要按它们排序。

我需要订购的类型可以有一个值1或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"是一个标准集合,里面是一个项目列表。物品清单是我想要成对订购的。

编辑

关于使用Tuples,这可能会起作用,但列表是作为标准集合传递给我的,最后我仍然需要一个标准列表。郁金香在这里真的不管用。

集合用于foreach迭代,因此顺序很重要。

如何订购2的副本

您可以将列表投影到包含列表中位置的新列表中,然后首先按"组号"排序:

myList.Select((f,i) => new {f, i})  // add the position in the list
      .OrderBy(fi => fi.i / n)      // "groups" into n items (2, 4, etc.)
      .ThenBy(fi => fi.f.Type)      // orders within each group by the Type
      .Select (fi => fi.f)          // removes the added index