【问题标题】:Sorting Array By Object's Values按对象的值对数组进行排序
【发布时间】:2013-11-04 19:04:09
【问题描述】:

我有一个名为 RateQuote 的对象,它具有以下内容:

  • 姓名
  • 期限
  • 英里

例如:

rate  = new RateQuote() {
  Term = 24,
  Miles = 120000,
  Name = '24 mo. / 120000 miles'
}

rate = new RateQuote() {
  Term = 24,
  Miles = 50000,
  Name = '24 mo. / 50000 miles'
} 

rate = new RateQuote() {
  Term = 12,
  Miles = 50000,
  Name = '12 mo. / 50000 miles'
} 

这些 RateQuote 被添加到 RateQuote[] 对象中:

  public void AddRate(RateQuote rate)
  {
      Rates = Rates.Concat(new RateQuote[] { rate }).ToArray();
  }

它们被.Concat添加后,我将如何排序?如果我的代码首先添加“24 月/120000 英里”,然后添加“24 月/50,000 英里”,最后添加“12 月/50000 英里”,我希望它对其进行排序,使其成为按此顺序:

  • 12 个月。 / 50000
  • 24 个月。 / 50000
  • 24 个月。 / 120000

它应该先按月排序,然后按英里排序。我很困惑,希望得到帮助。我知道我可以使用 .Sort 函数,但不确定如何在这种情况下使用它。提前感谢您的所有帮助。

【问题讨论】:

  • 如果可能的话,在 .Concat(使用 .OrderBy)之前排序会容易得多。为什么不呢?
  • 动态数组的制作方法很奇怪。为什么不使用List<RateQuote>
  • @Dennis,我正在使用的代码是由其他人编写的。它在我将来要​​修复的事情清单上。我的公司有很多事情要做,现在将其更改为 List 不在列表的顶部。我把它列在我可以修复的事情清单上。我们的代码库很大,现在需要时间来改变。谢谢。

标签: c# arrays list sorting


【解决方案1】:

您似乎想先通过Term 订购,然后再通过Miles 订购。然后你可以使用:

var sorted = Rates
               .OrderBy(r=> r.Term)
               .ThenBy(r=> r.Miles)
               .ToArray();

【讨论】:

  • 这对我有用。简单并按应有的方式对我的列表进行排序。
  • @Turp,不客气,还可以考虑使用List<RateQuote> 而不是数组。您始终可以通过调用 ToArray 从列表中取回一个数组
  • 我带着一个已经存在的应用程序进入了我的开发人员职位。我正在缓慢但肯定地纠正这样的事情,以使我们的平台更快、更有趣。这是我要做的事情的清单,但现在,我只需要在它显示之前对它进行排序。由于合规问题。谢谢!
【解决方案2】:

你可以使用 linq,比如:

var orderedRates = rates.GroupBy(rq => rq.Term)
                       .OrderBy(g => g.Key)
                       .SelectMany(g => g.OrderBy(rq => rq.Miles))
                       .ToArray();

【讨论】:

  • 这不符合 OP 的要求...先按月份排序,然后按里程排序
  • @Harrison : 请正确阅读问题并停止投反对票。
  • @FlyingStreudel,此方法也有效。但是,老实说,我不确定你的和 Habib 的区别是什么。您的代码似乎更多。您对此有何看法?
  • @Turp 我不知道ThenBy 是一种扩展方法:)
  • 这是基于两个属性对数组进行排序的复杂代码。您首先对集合进行分组,然后将集合展平,这也是无缘无故的。它使代码难以阅读和遵循,应该在生产中避免。
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多