【问题标题】:I need a sort function that sorts within the sort function我需要一个在排序函数中排序的排序函数
【发布时间】:2021-11-03 02:10:01
【问题描述】:

我正在尝试创建一个排序功能,可以智能地对我们的刺绣设计计划进行排序。订单有 ID,每个订单可能有 2 或 3 个设计。每个列表条目对应一个设计。同名设计也可能出现在多个订单中,因此设计“Manchester Utd Crest”可能出现在订单 123456 和订单 55555 上

我想先按设计名称(字符串)排序,然后按 OrderId(整数)排序​​。因此,我希望我所有的设计名称(例如 Manchester Utd Crest)在我们的日程安排中保持一致。但是,如果同一订单上有另一个设计,我希望订单中的第二个设计出现在第一个设计的下方,即使它有不同的名称。

所以我最终会得到这样的结果:

到目前为止,这是我的代码:它仅按 OrderId 排序,然后按设计名称排序。我需要它按设计名称排序,但还要确保相同的 OrderIds 也始终保持在列表中,但它现在不这样做:

embroideryJobs.Sort((EmbroideryJob a, EmbroideryJob b) =>
{
    if (a.OrderId != b.OrderId)
        return a.OrderId.CompareTo(b.OrderId);

    if (a.DesignProcessData[0].Name != b.DesignProcessData[0].Name)
        return a.DesignProcessData[0].Name.CompareTo(b.DesignProcessData[0].Name);

    return 0;
});

【问题讨论】:

  • 你应该提供你已经尝试过的东西。
  • 看看``OrderBy`
  • 我认为LINQ OrderBy versus ThenBy 可能是您正在寻找的。​​span>
  • 如何选择用于基于名称排序的设计(具有相同订单 ID)?例如。订单 123456 应该在 M 上还是在 N 上订购?这还不清楚。如果不选择特定的设计名称进行订购,您实际上只是按订单 ID 订购。
  • 我想先按设计名称(字符串)排序,然后按 OrderId 的(int)。这与你的解释相矛盾。如果是这种情况,同名元素会粘在一起,而不是具有相同订单 ID 的元素。

标签: c#


【解决方案1】:

听起来您想要按多个标准进行排序。您可以使用 LINQ 函数 OrderBy 和 ThenBy 来做到这一点。所以,你会想要这样排序:

var sortedJobs = embroideryJobs.OrderBy(x => x.OrderId).ThenBy(x => x.DesignName);

如果 embroideryJobs 包含以下内容:

OrderId DesignName
123456  Manchester Utd Crest
987654  Manchester Utd Crest
123456  Name & Number
5555555 Name & Number
5555555 Oldham Athletic Crest

sortedJobs 将包含以下内容:

OrderId DesignName
123456  Manchester Utd Crest
123456  Name & Number
987654  Manchester Utd Crest
5555555 Name & Number
5555555 Oldham Athletic Crest

另外,请确保您有一个拉入 System.Linq 命名空间的 using 语句:

using System.Linq;

在文件的顶部。

【讨论】:

  • 我很确定这会将所有 orderid 按 123456、123456、555555、555555、987654 之类的顺序排序。我想要它做的是优先考虑设计名称,但始终将具有多个设计,然后进行制作,以便如果在计划中有另一个具有相同设计名称的订单,则列表中的下一个订单将是该订单。将我的所有订单以及我的设计名称放在一起。
  • @Rob_Da_Joyce 我不确定我是否理解问题所在。你能提供一个更大的数据集来证明这个解决方案的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多