【问题标题】:How to order in duplicates of 2?如何订购 2 份的副本?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • Great D Stanley,这行得通。我认为 OrderBy 和除以 2 意味着成对进行。你能解释更多吗?我从来没有像这样使用过 OrderBy...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多