具有最大元音的状态应该是第一位。
如果元音不相同,那么
检查状态名称的长度以及最大长度 第一
如果长度也相同,则根据状态的第一个字符进行排序 名称
如果第一个字符也相同,则根据它们的位置放置 在列表中出现。
这是代码
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);
}
答案 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);
}