2014-04-06 4 views
0

dynamicaly로 채워진 keyvaluepair 바인딩 목록이 있습니다.keyvalue 쌍의 바인딩 목록에서 사용자 지정 정렬

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

목록은 다음 키 (ID)와 값 (텍스트)

enter image description here

내가 처음 5 개 항목을 오름차순으로 정렬 할 같이 또한 나머지 항목 asc.the 정렬해야이있다 열쇠가 아니라 가치에 따라. 예 : 값이 4,5,8,7,6,10,9,3,2,1,22 인 경우 정렬 결과는 4,5,6,7,8,1,2,3이어야합니다. , 9,10,22. 좋은 생각이야?

해결 답 :

 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; 
+0

음. 이제는 순서대로 나오게됩니다. 너무 어렵다면 목록을 두 개로 자르십시오. 따로 따로 정렬 한 다음 togther로 다시 결합하십시오. –

+0

예를 들어 주시겠습니까? – Apollon

+0

글쎄, 내 질문에 대답하지 않았다. –

답변

0

아이디어 토니 홉 킨슨 말했다 두에 목록을 잘라하는 것입니다. 따로 따로 정렬 한 다음 togther로 다시 결합하십시오. 그러면 바인드 목록을 지우고 조인 목록에서 채 웁니다. 정렬은 목록 <에만 적용 가능하지만 바인딩 목록에는 적용되지 않습니다. 답변은 편집 된 질문