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

如何将test.json的Id与ourOrders的id合并以过滤订单?

扩展订单过滤逻辑:纳入第三方我方订单ID

问题描述

现有C#方法FilterByOurOrders负责过滤订单:遍历region.orders全量订单,对比ourOrders中的订单ID,匹配则标记为我方订单(isOurOrder = true),最终仅保留非我方订单到结果集。现在需要扩展判断规则,将从/test.json读取的第三方我方订单列表(OrdersTimesInfo中的Id)也纳入我方订单判断——只要订单ID匹配ourOrders或第三方订单列表中的任意一个ID,就标记为我方订单并过滤。

实现思路

  1. 高效存储第三方订单ID:将从JSON读取的第三方订单ID存入HashSet<string>,利用HashSet的O(1)查找特性提升判断效率,同时指定忽略大小写的比较器,和原逻辑保持一致。
  2. 合并判断逻辑:在判断订单是否为我方订单时,同时检查ourOrders列表和第三方订单HashSet,任一匹配则标记为我方订单。
  3. 保留原有逻辑:维持原有的价格过滤(price < 1)和byOurOrders开关逻辑不变。

修改后的完整代码

private RegionModel FilterByOurOrders(RegionModel region, List<OurOrderModel> ourOrders, MarketSettings market, bool byOurOrders)
{
    var result = new RegionModel
    {
        updatedTs = region.updatedTs,
        orders = new List<OrderModel>(region.orders.Count)
    };

    // 读取并解析第三方我方订单ID,存入HashSet以提升查找效率
    var json = File.ReadAllText("/test.json");
    var otherBotOrders = JsonSerializer.Deserialize<OrdersTimesModel>(json);
    var thirdPartyOurOrderIds = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
    if (otherBotOrders?.OrdersTimesInfo != null)
    {
        foreach (var orderInfo in otherBotOrders.OrdersTimesInfo)
        {
            if (!string.IsNullOrEmpty(orderInfo.Id))
            {
                thirdPartyOurOrderIds.Add(orderInfo.Id);
                BotController.WriteLine($"{orderInfo.Id}");
            }
        }
    }

    foreach (var order in region.orders)
    {
        if (ConvertToDecimal(order.price) < 1 || !byOurOrders)
        {
            bool isOurOrder = false;

            // 检查是否匹配我方订单列表
            int i = 0;
            while (i < ourOrders.Count && !isOurOrder)
            {
                if (ourOrders[i].id.Equals(order.id, StringComparison.InvariantCultureIgnoreCase))
                {
                    isOurOrder = true;
                }
                ++i;
            }

            // 若未匹配我方订单,再检查第三方我方订单ID集合
            if (!isOurOrder)
            {
                isOurOrder = thirdPartyOurOrderIds.Contains(order.id);
            }

            // 非我方订单才加入结果集
            if (!isOurOrder)
            {
                result.orders.Add(order);
            }
        }
    }
    return result;
}

关键修改说明

  • 第三方ID存储优化:用HashSet<string>替代原未实际使用的Dictionary,既节省内存又加快查找速度,同时指定StringComparer.InvariantCultureIgnoreCase保证大小写不敏感匹配,和原逻辑对齐。
  • 判断逻辑扩展:在原有ourOrders检查之后,新增第三方订单ID的判断,只要任一条件满足就标记为我方订单。
  • 空值安全处理:增加otherBotOrders?.OrdersTimesInfo != null和!string.IsNullOrEmpty(orderInfo.Id)的空值判断,避免空引用异常。
  • 代码简洁性可选优化:原有的while循环可以替换为LINQ的Any()方法,让代码更简洁:
    isOurOrder = ourOrders.Any(o => o.id.Equals(order.id, StringComparison.InvariantCultureIgnoreCase));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:45:20