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