在Unity中如何获取字典中含指定部分值的最大Key
Unity C# 根据字典值的部分匹配获取最大Key的正确实现
你的代码存在两处问题:
Where的条件表达式括号位置错误,Contains的闭合括号应放在lambda表达式末尾- 直接对
Where返回的键值对集合调用Max(),未指定要取Key的最大值
正确的LINQ实现
通过筛选匹配项→提取对应Key→取最大值的流程实现,同时建议处理无匹配项的场景避免异常:
// 目标匹配字符串 string targetPrefix = "R1_G1_A1_M2"; // 筛选出Value包含目标前缀的项,提取Key后取最大值 var maxKey = lvl_dict .Where(item => item.Value.Contains(targetPrefix)) .Select(item => item.Key) .DefaultIfEmpty(-1) // 无匹配时返回默认值-1,可按需调整 .Max(); Debug.Log($"max key is : {maxKey}");
更严谨的异常处理写法
如果不需要默认值,可先判断是否存在匹配项:
string targetPrefix = "R1_G1_A1_M2"; var matchedKeys = lvl_dict .Where(item => item.Value.Contains(targetPrefix)) .Select(item => item.Key); if (matchedKeys.Any()) { int maxKey = matchedKeys.Max(); Debug.Log($"max key is : {maxKey}"); } else { Debug.LogWarning("未找到匹配的项"); }
额外优化提示
如果你的Value是严格前缀匹配(比如R1_G1_A1_M2一定是字符串开头),可以用item.Value.StartsWith(targetPrefix)替代Contains,匹配更精准,避免误匹配包含该字符串但非前缀的情况。
注意:需在代码顶部引入LINQ命名空间:using System.Linq;
内容的提问来源于stack exchange,提问作者FcoArturo
相关产品推荐
相关产品推荐

