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

在C#中对IEnumerable<TShirts>进行限制与筛选的实现方法

实现IEnumerable的红蓝T恤筛选需求

完全可行,核心思路是分别筛选红、蓝T恤并取指定数量,再合并结果。以下是具体实现:

基础实现代码

替换你代码中的// What to do ?部分:

// 筛选红色T恤并取指定数量(250件)
var redShirts = tshirtResults.Where(t => t.IsRed).Take(numberToTakeofeachcolor);
// 筛选蓝色T恤并取指定数量(250件)
var blueShirts = tshirtResults.Where(t => t.IsBlue).Take(numberToTakeofeachcolor);
// 合并两个颜色的T恤集合,重新赋值给原变量
tshirtResults = redShirts.Concat(blueShirts);

逻辑说明

  • Where(t => t.IsRed):从原集合中过滤出所有红色T恤
  • Take(numberToTakeofeachcolor):从筛选后的红色T恤中取前250件
  • Concat:将红色和蓝色的T恤集合合并为一个新的IEnumerable<TShirts>
  • 最终tshirtResults将包含最多500件T恤(250红+250蓝)

优化与边界处理

  1. 避免多次枚举原集合:
    由于IEnumerable是延迟执行的,多次调用Where会重复枚举原4000件T恤,影响性能。可以先转成List优化:

    var tshirtList = tshirtResults.ToList();
    var redShirts = tshirtList.Where(t => t.IsRed).Take(numberToTakeofeachcolor);
    var blueShirts = tshirtList.Where(t => t.IsBlue).Take(numberToTakeofeachcolor);
    tshirtResults = redShirts.Concat(blueShirts);
    
  2. 处理颜色数量不足的情况:
    如果原集合中红色/蓝色T恤数量不足250,上面的代码会取现有全部对应颜色的T恤,最终总数量会少于500。如果需要保证总数量为500,可以调整逻辑(比如优先取够一种颜色,剩下的从另一种补):

    var tshirtList = tshirtResults.ToList();
    var redShirts = tshirtList.Where(t => t.IsRed).Take(numberToTakeofeachcolor).ToList();
    int remaining = Limit - redShirts.Count;
    var blueShirts = tshirtList.Where(t => t.IsBlue).Take(remaining);
    tshirtResults = redShirts.Concat(blueShirts);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:52:47