Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > сортировка


Автор: GhosTer 17.1.2012, 08:18
народ. подскажите. как правильно отсортировать вот такой список:
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

Автор: Roha 17.1.2012, 09:27
смотри Array.Sort

Автор: GhosTer 17.1.2012, 09:43
Код

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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)