Как сортировать элементы в списке

Я новичок в программировании, и мне нужна помощь в сортировке элементов в списке. У меня есть код для зацикливания, который добавляет элементы в список. Я хочу отсортировать элементы в порядке убывания в другом списке. Например, вывод списка 1 равен 3,6,9, пока 39 отсортированный нисходящий список не перейдет в список2.

int thingsforlist;
do{
     listbox.item.add(thingsforlist); 
     thingsforlist = thingforlist+3;
  }
while (thingsforlist<=39);

person John Kënnëth Iglesia    schedule 28.08.2014    source источник


Ответы (2)


С помощью этой функции вы можете сортировать элементы в списке по убыванию или возрастанию.

Private Sub sortListBoxItems(ByRef lb As ListBox, ByVal ascending As Boolean)
    Dim items As List(Of Object)
    items = lb.Items.OfType(Of Object)().ToList()
    lb.Items.Clear()
    If ascending Then
        lb.Items.AddRange(items.OrderBy(Function(i) i).ToArray())
    Else
        lb.Items.AddRange(items.OrderByDescending(Function(i) i).ToArray())
    End If
End Sub

Или, если вы предпочитаете C#,

private void sortListBoxItems(ref ListBox lb, bool ascending)
{
    List<object> items;
    items = lb.Items.OfType<object>().ToList();
    lb.Items.Clear();
    if (ascending)
    { lb.Items.AddRange(items.OrderBy(i => i).ToArray()); }
    else
    { lb.Items.AddRange(items.OrderByDescending(i => i).ToArray()); }
}
person djv    schedule 28.08.2014
comment
этот код, я думаю, на C++, но я бы попытался понять синтаксис этого кода :). Я еще не изучал C и C++, я начал с C# - person John Kënnëth Iglesia; 28.08.2014
comment
@JohnKënnëthIglesia, это код VB.Net. Я предполагаю, что этот ответ появился до того, как стало ясно, что вы используете С#. - person RubberDuck; 28.08.2014
comment
Первоначально вы также поместили vb.net в свои теги. - person djv; 28.08.2014
comment
извините, хахаха, я думал, что это С++, потому что я редко вижу Dim на С#. Теперь я чувствую себя таким глупым. Я должен узнать больше... - person John Kënnëth Iglesia; 28.08.2014
comment
Теперь есть и С#. - person djv; 28.08.2014
comment
@ckuhn203 Зачем удалять тег vb.net? Это также полезно для кодеров vb.net (особенно мой ответ, который включает оба языка). Знаете ли вы, как часто мне нужно искать вопросы по c#, чтобы ответить на мои вопросы vb.net? Я почти стал беглым, делая только это. Нет ничего плохого в том, чтобы оставить тег. - person djv; 28.08.2014
comment
Потому что это не вопрос VB.Net, и люди должны понимать, что это не одно и то же. Комментарии не место для обсуждения. Поднимите его на Мете. - person RubberDuck; 28.08.2014
comment
Правильно, это вопрос .NET winforms. Нет ничего плохого в том, чтобы оставить тег. - person djv; 28.08.2014
comment
@DanVerdolino vb.NET и c#(.NET) — две лошади разного цвета! Помещать их в одно ведро совсем не полезно. .NET — это не язык. Это было бы единственное, что у этих двоих общего, и это все равно, что сравнивать груши с яблоками.. - person Vogel612; 28.08.2014
comment
Спасибо, ребята, теперь это работает. :). Мне очень жаль, что я поставил тег vb.net - person John Kënnëth Iglesia; 28.08.2014
comment
Google How to sort items in listbox vb.net вы окажетесь здесь, и вы получите ответ. Я не вижу, как неконструктивно оставлять тег. - person djv; 28.08.2014
comment
@JohnKënnëthIglesia, пожалуйста, примите тот ответ, который помог решить вашу проблему. - person djv; 28.08.2014

Я собирался предложить сортировку linq, а потом я просто подумал, что вы добавляете числа в 3 с... просто делаете это в обратном порядке и начинаете там, где хотите закончить, и работаете в обратном порядке.

int thingsforlist = 39;
do
{
    listbox.item.add(thingsforlist);
    thingsforlist -= 3;
}
while (thingsforlist > 0);

Если бы у вас был какой-то сортируемый объект, вы могли бы использовать linq и OrderByDescending, но я думаю, что ваш случай выглядит так, как будто вам не нужно вникать в это, по крайней мере, на основе предоставленного вами фрагмента кода.

EDIT: Вот еще один вариант, если вы хотите связать некоторые упорядоченные данные:

List<int> yourItems = new List<int>();
int thingsforlist = 0;
do
{
    yourItems.Add(thingsforlist);
    thingsforlist += 3;
}
while (thingsforlist <= 39);

listbox.DataSource = yourItems.OrderByDescending(i => i);
listbox.DataBind();
person Kelsey    schedule 28.08.2014
comment
Спасибо за ответ. Я собирался сделать то же самое, что вы мне дали, но я подумал, могу ли я сделать это по-другому, например, отсортировав элементы в порядке убывания. - person John Kënnëth Iglesia; 28.08.2014
comment
@JohnKënnëthIglesia, вам нужно хранить предметы таким образом, чтобы вы могли их хранить. В настоящее время вы просто увеличиваете целое число, поэтому значения не существуют для сортировки, пока вы не добавите их в свой ListBox, поэтому вам нужно будет извлечь элементы, затем отсортировать и повторно добавить их или сгенерировать их с самого начала в объект вы можете сортировать, затем сортировать, а затем добавлять их в список. - person Kelsey; 28.08.2014
comment
спасибо за помощь, я постараюсь понять все функции кодов, которые вы мне дали. listbox.DataSource = yourItems.OrderByDescending(i => i); список.DataBind(); - person John Kënnëth Iglesia; 28.08.2014