需要根据以下条件进行排序

时间:2014-12-26 05:28:53

标签: c# linq

  1. 具有最大元音的状态应该是第一位。

  2. 如果元音不相同,那么

    • 检查状态名称的长度以及最大长度 第一

    • 如果长度也相同,则根据状态的第一个字符进行排序 名称

    • 如果第一个字符也相同,则根据它们的位置放置 在列表中出现。

  3. 这是代码

    Public static void Main(string[] args)
    {
    
         List<ClsState> states = new List<ClsState>();
         states.Add(new ClsState("Gujarat"));
         states.Add(new ClsState("Maharashtra"));
         states.Add(new ClsState("Punjab"));
         states.Add(new ClsState("AndhraPradesh"));
         states.Add(new ClsState("Telengana"));
         var result = states.OrderBy(a => a.StateName.Length)
                            .ThenBy(a => a.StateName);
    
     }
    

1 个答案:

答案 0 :(得分:1)

    static void Main(string[] args)
    {
        List<ClsState> states = new List<ClsState>
        {
            new ClsState("Gujarat"),
            new ClsState("Maharashtra"),
            new ClsState("Punjab"),
            new ClsState("AndhraPradesh"),
            new ClsState("Telengana"),
        };

        var vowls = new List<char> { 'a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y' };
        var sorted = states
            .Select(s => new Tuple<int, ClsState>(s.StateName.ToCharArray().Where(l => vowls.Contains(l)).Count(), s))
            .OrderByDescending(i => i.Item1)
            .ThenByDescending(i => i.Item2.StateName.Length)
            .ThenBy(i => i.Item2.StateName[0])
            .ThenByDescending(i => states.Where(s => s.StateName == i.Item2.StateName).Count());
    }

如评论中所述,下面打印名称:

    foreach(var state in sorted)
    {
        Console.WriteLine(state.Item2.StateName);
    }