C# 如何对通用列表描述和ASC进行排序?
如何对通用列表描述和ASC进行排序?有林克和没有林克?我正在使用VS2008C# 如何对通用列表描述和ASC进行排序?,c#,.net,linq,C#,.net,Linq,如何对通用列表描述和ASC进行排序?有林克和没有林克?我正在使用VS2008 class Program { static void Main(string[] args) { List<int> li = new List<int>(); li.Add(456); li.Add(123); li.Add(12345667); li.Add(0); li.Ad
class Program
{
static void Main(string[] args)
{
List<int> li = new List<int>();
li.Add(456);
li.Add(123);
li.Add(12345667);
li.Add(0);
li.Add(1);
li.Sort();
foreach (int item in li)
{
Console.WriteLine(item.ToString() + "\n");
}
Console.ReadKey();
}
}
类程序
{
静态void Main(字符串[]参数)
{
List li=新列表();
加(456);
加(123);
加上(12345667);
添加(0);
li.添加(1);
li.Sort();
foreach(整数项,单位为li)
{
Console.WriteLine(item.ToString()+“\n”);
}
Console.ReadKey();
}
}
使用Linq
var ascendingOrder = li.OrderBy(i => i);
var descendingOrder = li.OrderByDescending(i => i);
没有林克
li.Sort((a, b) => a.CompareTo(b)); // ascending sort
li.Sort((a, b) => b.CompareTo(a)); // descending sort
请注意,如果没有Linq,列表本身将被排序。使用Linq,您可以获得列表的有序枚举,但列表本身没有改变。如果您想改变列表,可以将Linq方法更改为
li = li.OrderBy(i => i).ToList();
没有林克,
使用Sort()
然后使用Reverse()
进行排序。不使用Linq:
升序:
li.Sort();
降序:
li.Sort();
li.Reverse();
使用int值按降序对列表进行排序的非常简单的方法:
li.Sort((a,b)=> b-a);
希望这有帮助 我检查了上面的所有答案,想再添加一条信息。 我想按DESC顺序对列表进行排序,并且我正在搜索解决方案,该解决方案对于较大的输入更快,我之前使用过这种方法:-
li.Sort();
li.Reverse();
但我的测试用例因超过时间限制而失败,因此以下解决方案对我有效:-
li.Sort((a, b) => b.CompareTo(a));
因此,最终的结论是,第二种按降序排序列表的方法比前一种快一些。
Sort()
是一种无效的方法,因此不能以这种方式将Reverse()
链接到它。您将需要两个单独的操作。但是,使用LINQ,您可以将其链接到一个OrderBy
,但此时您应该使用OrderByDescending
。@有一天,如果您觉得其他用户的答案不正确,您应该评论、投票和/或提供您认为正确的答案,不要把别人的答案编辑成你认为正确的答案。我认为对于降序,使用li.Sort((a,b)=>b.CompareTo(a))更清晰代码>比此处使用的-1*
方法更有效。我相应地编辑了答案,但@Servy将其还原。@有一天,当作者在写下他们的意图时出错,将其更改为他们的意图是可以的。将其他人认为解决方案应该是的代码形式更改为使用您认为应该使用的不同方法不是一种合适的编辑方法。@onedaywhen;你可以在任何地方看到它。在帮助中心,“我应该在什么时候编辑帖子?[…]以澄清帖子的含义(而不改变该含义)”或只是-a.CompareTo(b)
。这不是int.CompareTo(int)
的原因。请参阅其中的说明:“需要使用比较,因为对于非常大的负数等,减法将换行为正数。”。如果您有b=int.MinValue
和a=1
(假设),则此操作将失败。有时一个方法调用是值得的。问题是关于泛型列表排序。“-”操作甚至不能编译许多类型。对于已编译的类型集,可以出现前面注释中提到的数值溢出错误