在C#中对列表进行排序(自定义排序规则)

时间:2018-10-19 19:51:31

标签: c# list split swap

我有一个名为 choosedGroupList 的字符串列表,由5个项目组成。每个项目代表一个组,
例如:L1和L4表示L1将与L4分组。
另一个示例:L1,L4和L5,L6表示组L1,L4将与组L5,L6分组

choosedGroupList

我正在尝试将此列表排序为:

L1和L4
L5和L6
L1,L4和L5,L6
L2和L1,L4,L5,L6
L3和L2,L1,L4,L5,L6

所以我写了这段代码来执行此任务,

@JsonUnwrapped
private Username username;

我在代码中没有例外,但是我没有得到期望的结果。

执行代码后,结果如下:

L1和L4
L1,L4和L5,L6
L2和L1,L4,L5,L6
L5和L6
L3和L2,L1,L4,L5,L6

2 个答案:

答案 0 :(得分:1)

假设1:您希望首先按'L'的数量排序,然后再按'L'的数字排序。

给出的代码中的主要问题是,您从不检查数组的长度,因此L1,L4总是在L5之前排序,因为L1在L5之前排序。

如果您先对'and'进行分割,然后对从','分割的数组长度进行排序,然后再对该数组的内容进行排序,那么它应该与建议的排序顺序相符。

答案 1 :(得分:1)

如何使用字典?

    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
        }