C# keyvaluepairs绑定列表中的自定义排序

C# keyvaluepairs绑定列表中的自定义排序,c#,winforms,sorting,bindinglist,C#,Winforms,Sorting,Bindinglist,我有一个动态填充的keyvaluepair绑定列表 BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>(); foreach (ListItem item in listBox2.Items) { Homelist.Add(new KeyValuePair<int, string>

我有一个动态填充的keyvaluepair绑定列表

  BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>();
  foreach (ListItem item in listBox2.Items)
    {
     Homelist.Add(new KeyValuePair<int, string>(item.Id, item.Name));
    }
BindingList Homelist=newbindingList();
foreach(listBox2.Items中的ListItem项)
{
添加(新的KeyValuePair(item.Id,item.Name));
}
列表包含键(id)和值(文本),如图所示

  BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>();
  foreach (ListItem item in listBox2.Items)
    {
     Homelist.Add(new KeyValuePair<int, string>(item.Id, item.Name));
    }

  BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>();
  foreach (ListItem item in listBox2.Items)
    {
     Homelist.Add(new KeyValuePair<int, string>(item.Id, item.Name));
    }
我想对前5个项目进行asc排序,然后对其余项目进行asc排序。排序必须按值而不是按键。 示例:如果我有值:4,5,8,7,6,10,9,3,2,1,22,排序结果必须是4,5,6,7,8,1,2,3,9,10,22。你知道吗

  BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>();
  foreach (ListItem item in listBox2.Items)
    {
     Homelist.Add(new KeyValuePair<int, string>(item.Id, item.Name));
    }
解答:

  BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>();
  foreach (ListItem item in listBox2.Items)
    {
     Homelist.Add(new KeyValuePair<int, string>(item.Id, item.Name));
    }
     public int Compare(KeyValuePair<int,string> a, KeyValuePair<int,string> b)
    {
        return a.Value.CompareTo(b.Value);
    }
 List<keyvaluepair><int,>> Playinglist = new List<keyvaluepair><int,>>();
            for (int i = 0; i < 5; i ++)
            {
                Playinglist.Add(Homelist[i]);
            }
            Playinglist.Sort(Compare);

            List<keyvaluepair><int,>> Benchlist = new List<keyvaluepair><int,>>();
            for (int i = 5; i < Homelist.Count(); i++)
            {
                Benchlist.Add(Homelist[i]);
            }
            Benchlist.Sort(Compare);

            //union 2 lists
            var unionedList = new List<keyvaluepair><int,>>();
            unionedList.AddRange(Playinglist.Union(Benchlist));

            Homelist.Clear();
            for (int i = 0; i < unionedList.Count(); i++)
            {
                Homelist.Insert(i, unionedList[i]);
            }
            game.GetHomelist = Homelist;
public int比较(键值对a、键值对b)
{
返回a.Value.CompareTo(b.Value);
}
列表>播放列表=新列表>();
对于(int i=0;i<5;i++)
{
Playinglist.Add(Homelist[i]);
}
播放列表。排序(比较);
列表>基准列表=新列表>();
对于(int i=5;i();
unionedList.AddRange(Playinglist.Union(Benchlist));
Homelist.Clear();
对于(int i=0;i
托尼·霍普金森说的想法是把名单一分为二。分别对它们进行排序,然后将它们重新连接在一起。然后清除bindlist并从连接列表中填充。排序只能应用于列表,不能应用于绑定列表。Answare在编辑问题中

Um是什么让它以现在的顺序出现的。如果这个问题太难解决,就把清单一分为二。你能给我举个例子吗?不,你没有回答我的任何问题。
  BindingList<KeyValuePair<int, string>> Homelist = new BindingList<KeyValuePair<int, string>>();
  foreach (ListItem item in listBox2.Items)
    {
     Homelist.Add(new KeyValuePair<int, string>(item.Id, item.Name));
    }