Csharp/C#教程:排序列表除了LINQ的一个条目分享


排序列表除了LINQ的一个条目

我想订购一个字符串列表,但列表中的一个字符串应该始终在开头而不是排序。 使用LINQ最简单的方法是什么?

//should be ordered in: first, a,b,u,z: List l = {"z","u","first","b","a"}; 

LINQ中没有prepend方法或其他东西,有吗?

 l = l.OrderBy(i => i != "first").ThenBy(i => i).ToList(); 

这里的诀窍是根据有问题的物品是否是您的特殊物品来订购,然后按照您的惯例按物品订购。

既然您说要订购列表(使用linq),请不要忘记将查询结果分配回列表。


你还问了一个prepend方法,怎么样:

 l = new[] { "first" }.Concat(l).ToList(); 

您可以轻松地将其作为扩展方法:

 public static class LinqExtensions { public static IEnumerable Prepend(this IEnumerable query, T item) { return new[] { item }.Concat(query); } } 

称为:

 l = l.Prepend("first").ToList(); 

您可以使用OrderByThenBy模式:

 string[] l = { "z", "u", "first", "b", "a" }; var result = l.OrderBy(i => i != "first").ThenBy(i => i); 

按两个标准排序。 第一个标准基于某种谓词,第二个标准基于项目的价值:

上述就是C#学习教程:排序列表除了LINQ的一个条目分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 [TestMethod] public void TestMethod1() { var list = new[] { "z", "u", "first", "b", "a" }.OrderByPredicateFirst(s => s == "first").ToList(); Assert.AreEqual("first", list[0]); Assert.AreEqual("a", list[1]); Assert.AreEqual("b", list[2]); Assert.AreEqual("u", list[3]); Assert.AreEqual("z", list[4]); } public static class Extensions { public static IEnumerable OrderByPredicateFirst(this IEnumerable source, Predicate firsts) { return source .OrderBy(s => firsts(s) ? 0 : 1) .ThenBy(s => s); } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998421.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐