繁体   English   中英

排序列表 <KeyValuePair<int, string> &gt;大写和小写

[英]Sorting a List<KeyValuePair<int, string>> Uppercase and Lowercase

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();

简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM