C# 按对象值对数组排序
我有一个名为RateQuote的对象,它具有以下内容: 名称 学期 英里 例如:C# 按对象值对数组排序,c#,arrays,list,sorting,C#,Arrays,List,Sorting,我有一个名为RateQuote的对象,它具有以下内容: 名称 学期 英里 例如: rate = new RateQuote() { Term = 24, Miles = 120000, Name = '24 mo. / 120000 miles' } 及 及 正在将这些RateQuote添加到RateQuote[]对象: public void AddRate(RateQuote rate) { Rates = Rates.Concat(new RateQuo
rate = new RateQuote() {
Term = 24,
Miles = 120000,
Name = '24 mo. / 120000 miles'
}
及
及
正在将这些RateQuote添加到RateQuote[]对象:
public void AddRate(RateQuote rate)
{
Rates = Rates.Concat(new RateQuote[] { rate }).ToArray();
}
在.Concat添加它们之后,我将如何对其进行排序?如果我的代码先添加24个月/120000英里,然后再添加24个月/50000英里,最后添加12个月/50000英里,我希望它按照以下顺序进行排序:
12个月/50000
24个月/50000
24个月/120000
它应该先按月排序,然后按英里排序。我很困惑,希望能得到帮助。我知道我可以使用.Sort函数,但不确定在这种情况下如何使用它。提前感谢您的帮助。您似乎想先按期限再按里程订购。然后您可以使用:
var sorted = Rates
.OrderBy(r=> r.Term)
.ThenBy(r=> r.Miles)
.ToArray();
您可以使用linq,类似于:
var orderedRates = rates.GroupBy(rq => rq.Term)
.OrderBy(g => g.Key)
.SelectMany(g => g.OrderBy(rq => rq.Miles))
.ToArray();
如果可能的话,在.Concat之前使用.OrderBy进行排序会容易得多。为什么不呢?制作动态数组是一种非常奇怪的方法。你为什么不使用列表?@Dennis,我正在使用的代码是别人写的。这是我未来要解决的问题清单。我的公司有很多事情要做,现在把它改成一个列表并不是最重要的。当我有能力的时候,我会把它列在我的事情清单上。我们的代码库很大,现在需要时间进行更改。谢谢。这不符合OP的要求……先按月份排序,然后按月份排序Miles@Harrison:请正确阅读问题并停止反对投票。@Flyingstrudel,此方法也适用。然而,老实说,我不知道你的和哈比卜的有什么区别。你的代码似乎要多得多。您对此有何看法?@Turp我当时不知道by是一种扩展方法:这是一种基于两个属性对数组进行排序的复杂代码。您首先对集合进行分组,然后对集合进行展平,这也是毫无原因的。这使得代码很难阅读和理解,在生产中应该避免。这对我来说很有效。简单和整理我的清单应该如何。@ Turp,欢迎你,也考虑使用列表而不是数组。通过调用ToArrayI,您总是可以从列表中获得一个数组。Arrayi在我的开发人员位置上使用了一个已经存在的应用程序。我正在慢慢地,但肯定地,纠正这样的事情,使我们的平台更快,让所有人都感到愉快。这是我要做的事情列表中的一部分,但现在,我只需要在列表显示之前对其进行排序。由于合规性问题。谢谢
var sorted = Rates
.OrderBy(r=> r.Term)
.ThenBy(r=> r.Miles)
.ToArray();
var orderedRates = rates.GroupBy(rq => rq.Term)
.OrderBy(g => g.Key)
.SelectMany(g => g.OrderBy(rq => rq.Miles))
.ToArray();