Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要根据以下条件进行排序_C#_Linq - Fatal编程技术网

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

C# 需要根据以下条件进行排序,c#,linq,C#,Linq,元音最大的州应该排在第一位 如果没有一个元音是相同的,那么 检查状态名称的长度,以及哪个状态名称的长度最大 首先 若长度也相同,则根据状态的第一个字符进行排序 名字 如果第一个字符也是相同的,则根据它们的位置放置 出现在列表中 这是密码 Public static void Main(string[] args) { List<ClsState> states = new List<ClsState>(); states.Add(new ClsSta

元音最大的州应该排在第一位

如果没有一个元音是相同的,那么

检查状态名称的长度,以及哪个状态名称的长度最大 首先

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

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

这是密码

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

 }

您的需求是四级排序,但您只有两个排序标准。使用OrderBy-Comparer并使用自定义比较器将逻辑添加到自定义comarer类中。在中,不要认为这是一个坏问题,但这将有助于查看演示用例的示例输出。到底什么不起作用?它根据元音的数量从最高的到最低的排序。然后按长度从最长到最短。然后通过第一个字母升序:从a到z。最后,根据它在集合中出现的次数。不介意,请确保在控制台屏幕上打印我尝试过的…就像排序的{console.WriteLinesorted.FirstOrDefault;}中的每个var项一样,您必须访问元组中的项才能打印它。我在编辑中添加了它抱歉它没有排序。。。。如果长度也相同,则根据州名称的第一个字符进行排序。抱歉,这不是排序…根据条件如果长度也相同,则根据州名称的第一个字符进行排序
    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);
    }