0

私は次のようなクラスを持っています

public class KeyNamePair
{
 public string Key {get;set;}

 public string Name{get;set;}
}

私のコード

List<KeyNamePair> list =new List<KeyNamePair>();

    list.Add("1", "Day 1");
    list.Add("2", "Day 11");
    list.Add("4", "Day 5");
    list.Add("6", "Day 13");

リストを並べ替えて表示するにはどうすればよいですか

>  "Day1", "Day5", "Day 11", "Day 13"

順番に?

私は試した

var SortedList = source.OrderBy(x => x.Name).ToList();
            return SortedList;

これは何もしません

4

7 に答える 7

0

私はあなたがこれに満足することを確信しています:)

public class KeyNamePair : IComparable
{
  public string Key { get; set; }

  public string Name { get; set; }

  public KeyNamePair(string key, string name)
  {
    this.Key = key;
    this.Name = name;
  }

  public int CompareTo(object obj)
  {
    var tmp = (KeyNamePair)obj;
    var newKey = int.Parse(tmp.Name.Split(' ')[1]);

    var oldKey = int.Parse(Name.Split(' ')[1]);

    if (oldKey > newKey)
      return (1);
    if (oldKey < newKey)
      return (-1);
    else
      return (0);
  }
}

  List<KeyNamePair> list = new List<KeyNamePair>();

  list.Add(new KeyNamePair("1", "Day 1"));
  list.Add(new KeyNamePair("2", "Day 11"));
  list.Add(new KeyNamePair("4", "Day 5"));
  list.Add(new KeyNamePair("6", "Day 13"));
  list.Sort();

  foreach (var keyNamePair in list)
  {
    System.Console.Write(keyNamePair);
  }
于 2013-10-09T12:28:59.163 に答える
0

これはうまくいくはずです:

list = list.OrderBy(kn => {
    var digits = kn.Name.Split().Last();
    int num = int.MaxValue;
    if (digits.All(Char.IsDigit))
    { 
        num = int.Parse(new string(digits.ToArray()));
    }
    return num;
}).ToList();

補足: 既に利用可能な を使用することもできますKeyValuePair<string, string>

于 2013-10-09T11:46:26.707 に答える