【问题标题】:Sorting a List<KeyValuePair<int, string>> Uppercase and Lowercase排序 List<KeyValuePair<int, string>> 大写和小写
【发布时间】:2014-08-28 10:10:05
【问题描述】:
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

按大写和小写排序。

我该如何解决。

【问题讨论】:

标签: c# sorting


【解决方案1】:

这是简单的解决方案。

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

【讨论】:

    【解决方案2】:

    您可以实现自己的IComparer&lt;string&gt; 来为您进行排序。

    试试这个:

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

    简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 2012-12-04
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多