Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка 
V
    Опции темы
GhosTer
Дата 17.1.2012, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 31.5.2007

Репутация: нет
Всего: нет



народ. подскажите. как правильно отсортировать вот такой список:
1
4.3.2
3.1
2
4.3.1
3
3.2
6
4.1
4.3

что бы в итоге получилось:
1
2
3
3.1
3.2
4.1
4.3
4.3.1
4.3.2
6
PM MAIL   Вверх
Roha
Дата 17.1.2012, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



смотри Array.Sort
PM MAIL   Вверх
GhosTer
Дата 17.1.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 31.5.2007

Репутация: нет
Всего: нет



Код

Array.Sort 


сортирует криво. у него прочему то 4.3 меньше 15 и больше 7. То что меньше я понимаю. А вот как оно больше 7... это загадки

Добавлено @ 09:51
Сделал как обычно через попу. Но если кому то подойдет, то может воспользуется.
изначально получаю данные из  листбокса.
разбиваю данные в массив. после чего произвожу сортировку и засовываю обратно в листбокс.

Код

        string[][] sort(string[][] mas)
        {
            string[][] massiv = new string[0][];
            massiv = mas;
        repit:
            for (int i = 0; i < massiv.Length - 1; i++)
                if (Convert.ToDouble(massiv[i][0]) > Convert.ToDouble(massiv[i + 1][0]))
                {
                    string[] buf = massiv[i];
                    massiv[i] = massiv[i + 1];
                    massiv[i + 1] = buf;
                    goto repit;
                }
            return massiv;
        }

        string[][] sort_position(string[][] mas, int position)
        {
            string[][] massiv = new string[0][];
            massiv = mas;
        repit:
            for (int i = 0; i < massiv.Length - 1; i++)
            {
                double v1 = 0, v2 = 0;
                try { v1 = Convert.ToDouble(massiv[i][position]); }
                catch { }
                try { v2 = Convert.ToDouble(massiv[i + 1][position]); }
                catch { }
                if (v1 > v2)
                {
                    if (massiv[i][position - 1] == massiv[i + 1][position-1])
                    {
                        string[] buf = massiv[i];
                        massiv[i] = massiv[i + 1];
                        massiv[i + 1] = buf;
                        goto repit;
                    }
                }
            }
            return massiv;
        }

        string[][] massivchik(string[][] mas)
        {
            int max = 0;
            for (int i = 0; i < mas.Length; i++) if (max < mas[i].Length) max = mas[i].Length;
            //max++;
            string[][] massiv = new string[0][];

            for (int i = 0; mas.Length > i; i++)
            {
                Array.Resize(ref massiv, massiv.Length + 1);
                massiv[massiv.Length - 1] = new string[max];
                for (int t = 0; t < massiv[i].Length; t++)
                {
                    if (mas[i].Length > t)
                        massiv[i][t] = mas[i][t];
                    else
                        massiv[i][t] = "";
                }
            }
            massiv = sort(massiv);
            for (int i = 1; i < max; i++)
                massiv = sort_position(massiv, i);
            return massiv;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            string[][] massiv = new string[0][];
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                string[] mas=new string[0];
                string stroka=listBox1.Items[i].ToString();
                int begin = 0;
                for (int i1 = 0; i1 < stroka.Length; i1++)
                {
                    if ((stroka[i1] == '.') || (stroka[i1] == ','))
                    {
                        if (begin < i1)
                        {
                            Array.Resize(ref mas, mas.Length + 1);
                            mas[mas.Length - 1] = stroka.Substring(begin, i1 - begin + 0);
                        }
                        begin = i1 + 1;
                    }
                    if (i1 == stroka.Length - 1)
                        if (begin < i1 + 1)
                        {
                            Array.Resize(ref mas, mas.Length + 1);
                            mas[mas.Length - 1] = stroka.Substring(begin, i1 - begin + 1);
                        }
                }
                Array.Resize(ref massiv, massiv.Length + 1);
                massiv[massiv.Length - 1] = mas;
            }
            massiv = massivchik(massiv);
            listBox1.Items.Clear();
            for (int i = 0; i < massiv.Length; i++)
            {
                string str = "";
                for (int t = 0; t < massiv[i].Length; t++)
                {
                    if (massiv[i][t] != "")
                    {
                        if (str != "") str = str + ".";
                        str = str + massiv[i][t];
                    }
                }
                listBox1.Items.Add(str);
            }
        }



Это сообщение отредактировал(а) GhosTer - 17.1.2012, 10:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.