Сортировка списка в c # (пользовательские правила сортировки) - PullRequest
0 голосов
/ 19 октября 2018

У меня есть список строк с именем chootedGroupList , состоящий из 5 элементов.Каждый элемент представляет группу,
Например: L1andL4 означает, что L1 будет сгруппирован с L4.
Другой пример: L1, L4andL5, L6 означает, что группа L1, L4 будет сгруппирована с группой L5, L6

choosedGroupList

Я пытаюсь отсортировать этот список так:

L1andL4
L5andL6
L1, L4andL5, L6
L2andL1, L4, L5, L6
L3andL2, L1, L4, L5, L6

Поэтому я написал этот код для выполнения этой задачи,

 //sorting choosedGroupList
        for (int k = 0; k < choosedGroupList.Count; k++)
        {
            for (int j = k + 1; j < choosedGroupList.Count; j++)
            {
                string[] parts = choosedGroupList[j].Split(new string[] { "and" }, StringSplitOptions.None);
                if (parts[0] == choosedGroupList[k].Replace("and", ",") || parts[1] == choosedGroupList[k].Replace("and", ","))
                {
                    string[] parts2 = choosedGroupList[k + 1].Split(new string[] { "and" }, StringSplitOptions.None);
                    //if (parts[0] != parts2[0] || parts[1] != parts2[1])
                    //{
                        String Temp = choosedGroupList[k + 1];
                        choosedGroupList[k + 1] = choosedGroupList[j];
                        choosedGroupList[j] = Temp;
                    //}
                }
            }
        }

У меня нет исключений в коде, но я не получаю желаемых результатов.

После выполнения кода это результат:

L1andL4
L1, L4andL5, L6
L2andL1, L4, L5, L6
L5andL6
L3 и L2, L1, L4, L5, L6

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Как насчет использования словаря?

    public static Dictionary<string, int> YourDictionary()
    {
        Dictionary<string, int> returnDict = new Dictionary<string, int>();

        returnDict.Add("L1andL4", 1);
        returnDict.Add("L5andL6", 2);
        returnDict.Add("L1,L4andL5,L6", 3);
        returnDict.Add("L2andL1,L4,L5,L6", 4);
        returnDict.Add("L3andL2,L1,L4,L5,L6", 5);

        return returnDict;
    }

Затем переберите словарь:

        var theDictionary = clsProdDesign.YourDictionary();
        var items = from pair in theDictionary orderby pair.Value ascending select pair;

        foreach (KeyValuePair<string, int> pair in items)
        {
            //do whatever
        }
0 голосов
/ 19 октября 2018

Предположение 1: вы хотите отсортировать сначала по количеству символов «L», а затем по номерам, следующим за буквами «L».

Основная проблема в данном коде состоит в том, что вы никогда не проверяете длину массивов, поэтомуL1, L4 всегда будут сортировать до L5, потому что L1 сортирует до L5.

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

...