Tri d’une liste d’éléments dans une liste

Je veux obtenir un tas d’éléments d’une liste, les append à un tableau, le sortinger, puis le replacer dans une liste différente. Voici ce que je suis venu avec:

ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); q.Sort(); listBox5.Items.Add(q.ToSsortingng()); 

Mais ça ne marche pas. Des idées?

 ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); } q.Sort(); listBox5.Items.Clear(); foreach(object o in q){ listBox5.Items.Add(o); } 

Vous pouvez simplement utiliser la fonctionnalité intégrée ListBox.Sorted

  foreach (object o in listBox4.Items) { listBox5.Items.Add(o); } listBox5.Sorted = true; 

Le paramétrage de ListBox5.Sorted = true garantira que les éléments de la zone de liste sont sortingés et que les éléments suivants ajoutés à la zone de liste seront ajoutés dans le bon ordre.

Bien entendu, cela suppose que vous ayez des critères de sorting simples, comme le suggère votre exemple.

Essaye ça:

 var list = lstBox.Items.Cast().OrderBy(item => item.Text).ToList(); lstBox.Items.Clear(); foreach (ListItem listItem in list) { lstBox.Items.Add(listItem); } 

Si vous en avez besoin pour sortinger les valeurs, il suffit de désactiver item.Text avec item.Value.

Prendre plaisir!

Ajoutez les éléments au tableau et fermez la boucle. Ensuite, sortinger les valeurs du tableau et le lier à la liste

Essayez AddRange

  ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); q.Sort(); listBox5.Items.AddRange(q.ToArray()); 

Si vous utilisez .Net3.5, utilisez linq pour terminer cette tâche. Voici une liste de conversion et de sorting

  var list = ListBox1.Items.Cast().Select(item => item.Value).ToList(); list.Sort(); ListBox2.DataSource =list; ListBox2.DataBind(); 
  private void SortListBox(ListBox listBox) { SortedList list = new SortedList(); foreach (ListItem i in listBox.Items) { list.Add(i.Text, i.Value); } listBox.Items.Clear(); foreach(KeyValuePair i in list){ listBox.Items.Add(new ListItem(i.Key, i.Value)); } } 

aussi vous pouvez utiliser des “méthodes d’extension” que j’ai écrites:

 public static class ExtensionMethods { public static void Sort(this ListControl lb, bool desc = false) { var list = lb.Items.Cast().ToArray(); list = desc ? list.OrderByDescending(x => x.Text).ToArray() : list.OrderBy(x => x.Text).ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } public static void SortByValue(this ListControl lb, bool desc = false) { var list = lb.Items.Cast().ToArray(); list = desc ? list.OrderByDescending(x => x.Value).ToArray() : list.OrderBy(x => x.Value).ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } public static void SortByText(this ListControl lb, bool desc = false) { lb.Sort(desc); } public static void SortRandom(this ListControl lb) { var list = lb.Items.Cast() .OrderBy(x => Guid.NewGuid().ToSsortingng()) .ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } } 

Trier les listes déroulantes

 void sort() { if (listBox1.Items.Count <= 1) return; for (int j = 0; j < listBox1.Items.Count - 1; j++) { for (int i = 0; i < listBox1.Items.Count - 1; i++) { listBox1.SetSelected(i, true); string a = listBox1.SelectedItem.ToString(); listBox1.SetSelected(++i, true); i--; string b = listBox1.SelectedItem.ToString(); if (b.CompareTo(a) == 1) { listBox1.Items.RemoveAt(i); listBox1.Items.Insert(i, b); i++; listBox1.Items.RemoveAt(i); listBox1.Items.Insert(i, a); i--; } } } } 
 protected void Sort(ListBox lbox) { try { List> ListBoxList = new List>(); foreach (ListItem li in lbox.Items) { ListBoxList.Add(new KeyValuePair(li.Value, li.Text)); } if (ListBoxList.Count > 0) { ListBoxList = ListBoxList.OrderBy(x => x.Value).ToList(); lbox.DataTextField = "Value"; lbox.DataValueField = "Key"; lbox.DataSource = ListBoxList; lbox.DataBind(); } } catch (Exception error) { error.WriteEvent(); throw; } }