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

如何按平台找出两个不同对象列表中的缺失ValidGame

按平台查找缺失的ValidGame解决方案

核心思路

先将现有List<Game>按平台类型分组,得到每个平台下已上线的游戏ID集合,再对比全量List<ValidGame>,找出每个平台未覆盖的游戏。

实现步骤

  1. 筛选有效平台类型:排除Unknown类型,仅处理iOS、Android这类实际运营平台。
  2. 按平台收集已存在的游戏ID:遍历所有Game,记录每个平台下已存在的Game的Id(去重避免重复统计)。
  3. 对比找出缺失项:针对每个平台,筛选出ValidGame中Id不在对应平台已存在ID集合里的项。

代码实现

// 假设已有这两个列表实例
List<Game> existingGames = ...;
List<ValidGame> allValidGames = ...;

// 1. 获取需要检查的目标平台(排除Unknown)
var targetPlatforms = Enum.GetValues<Type>().Where(t => t != Type.Unknown);

// 2. 构建每个平台对应的已存在Game的Id集合(用HashSet提升查找效率)
var platformExistingGameIds = targetPlatforms.ToDictionary(
    platform => platform,
    platform => existingGames
        .Where(game => game.Platforms?.Any(p => p.PlatformType == platform) == true)
        .Select(game => game.Id)
        .ToHashSet()
);

// 3. 计算每个平台缺失的ValidGame
var platformMissingGames = targetPlatforms.ToDictionary(
    platform => platform,
    platform => allValidGames
        .Where(validGame => !platformExistingGameIds[platform].Contains(validGame.Id))
        .ToList()
);

// 示例:输出各平台缺失的游戏信息
foreach (var kvp in platformMissingGames)
{
    Console.WriteLine($"【{kvp.Key}平台】缺失的游戏:");
    foreach (var game in kvp.Value)
    {
        Console.WriteLine($"ID: {game.Id} | 名称: {game.Name}");
    }
}

关键细节说明

  • 用HashSet存储已存在的Game Id:Contains操作时间复杂度为O(1),远优于List的O(n),适合数据量较大的场景。
  • 空值防护:通过?.Any()处理game.Platforms可能为null的情况,避免空引用异常。
  • 以Id作为唯一标识:相比Name更可靠,避免同名不同游戏的误判。

内容的提问来源于stack exchange,提问作者Zenitha Mealthow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:37:44