对列表<键值对<整数、字符串>>大写和小写进行排序
本文关键字:排序 列表 整数 字符串 键值对 | 更新日期: 2023-09-27 18:19:48
var parameters = new List<KeyValuePair<string, string>>();
parameters.Add(new KeyValuePair<string, string>("AC", "123"));
parameters.Add(new KeyValuePair<string, string>("Ab", "123"));
parameters.Add(new KeyValuePair<string, string>("Db", "123"));
parameters.Add(new KeyValuePair<string, string>("CD", "123"));
var sortParameters = parameters.OrderBy(x => x.Key).ToList();
这是我的来源,
结果是
Ab
AC
CD
Db
但我需要结果
AC
Ab
CD
Db
按大写和小写排序。
我该如何解决它。
这是简单的解决方案。
SortedDictionary<string, string> parameters = new SortedDictionary<string, string>(StringComparer.Ordinal);
parameters.Add("AC", "123");
parameters.Add("Ab", "123");
parameters.Add("Db", "123");
parameters.Add("CD", "123");
您可以实现自己的IComparer<string>
来为您执行排序。
试试这个:
public class StringByCharComparer : IComparer<string>
{
public int Compare(string x, string y)
{
var xcs = x.ToCharArray();
var ycs = y.ToCharArray();
return Compare(xcs, ycs);
}
private int Compare(IEnumerable<char> xs, IEnumerable<char> ys)
{
if (!xs.Any() || !ys.Any())
{
return 0;
}
else
{
var x = xs.First();
var y = ys.First();
var r = x.CompareTo(y);
if (r == 0)
{
r = Compare(xs.Skip(1), ys.Skip(1));
}
return r;
}
}
}
然后这样称呼它:
var sortParameters =
parameters
.OrderBy(x => x.Key, new StringByCharComparer())
.ToList();
我得到的结果是:
Key Value
AC 123
Ab 123
CD 123
Db 123
我只是从Seminda的回答中学到了一些东西。
你可以这样做:
var sortParameters =
parameters
.OrderBy(x => x.Key, StringComparer.Ordinal)
.ToList();
简单。