如何从C#字符串列表中获取含'>'最多的最长字符串?
筛选包含最多'>'字符的字符串
给定C#字符串列表:
List<string> list = new List<string> { "Door Hardware > Door Trim", "Door Hardware > Door Trim > Pulls", "Door Hardware > Door Trim > Pulls > Flush", "Barn Doors & Hardware", "Barn Doors & Hardware > Barn Door Hardware", "Door Hardware", "Brands > Beyerle" };
需求是从中筛选出包含>字符数量最多的字符串,即"Door Hardware > Door Trim > Pulls > Flush"。
之前使用的LINQ代码:
var myVal = list.Where(s => s.Contains('>')).OrderByDescending(s => s.Length).First();
返回的是"Barn Doors & Hardware > Barn Door Hardware",不符合需求——这段代码按字符串长度排序,而非>的数量排序,该字符串长度更长但仅包含1个>。
正确解决方案
通过LINQ先按>的数量倒序排序,若存在多个>数量相同的字符串,再按长度倒序取最长的:
var myVal = list .OrderByDescending(s => s.Count(c => c == '>')) .ThenByDescending(s => s.Length) .First();
说明
OrderByDescending(s => s.Count(c => c == '>')):按每个字符串中>的字符数量从多到少排序,确保包含3个>的目标字符串排在首位;ThenByDescending(s => s.Length):作为兜底逻辑,当多个字符串的>数量相同时,取长度最长的那个;First():获取排序后的第一个元素,即为符合需求的结果。
内容的提问来源于stack exchange,提问作者alopezdev
相关产品推荐
相关产品推荐

