You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:41:29