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

基于子串过滤List<string>及按特定规则排序SKU列表的技术问询

嗨,我来帮你搞定这两个日常开发里的常见问题,咱们一个个来拆解:

1. 如何仅基于子串对List集合进行过滤?

在.NET生态里用LINQ就能轻松实现,核心是结合Where方法和字符串的匹配逻辑,给你几个实用场景的例子:

  • 基础区分大小写过滤:要筛选包含指定子串的元素,直接用Contains就够了:

    List<string> originalList = new List<string> { "apple pie", "banana bread", "cherry tart", "apple cider" };
    string targetSubstring = "apple";
    List<string> filteredList = originalList.Where(s => s.Contains(targetSubstring)).ToList();
    // 结果:["apple pie", "apple cider"]
    
  • 忽略大小写的过滤:如果不需要区分大小写(比如要匹配"Apple"和"apple"),用IndexOf配合忽略大小写的规则更稳妥:

    List<string> filteredList = originalList.Where(s => 
        s.IndexOf(targetSubstring, StringComparison.OrdinalIgnoreCase) >= 0
    ).ToList();
    
  • 匹配开头/结尾的子串:要是需要筛选以某子串开头或结尾的元素,直接用StartsWith或EndsWith效率更高:

    // 筛选以"banana"开头的元素
    List<string> startFiltered = originalList.Where(s => s.StartsWith("banana")).ToList();
    // 筛选以"tart"结尾的元素
    List<string> endFiltered = originalList.Where(s => s.EndsWith("tart")).ToList();
    
2. SKU排序方案

根据你给出的SKU规则,排序逻辑应该是先按分组(第4-6位)排序,再按组内优先级(第7-9位,数值越小越靠前)排序,前3位和第10位及以后的填充位不影响排序。用LINQ的OrderBy+ThenBy就能实现,还能顺便处理边界异常:

假设你的SKU列表是这样的:

List<string> skuList = new List<string> {
    "XXXABC123XYZ",
    "XXXDEF001UVW",
    "XXXABC056LMN",
    "XXXDEF023PQR"
};

对应的排序代码:

List<string> sortedSkuList = skuList
    .OrderBy(sku => {
        // 提取第4-6位(索引从0开始,所以取Substring(3, 3))
        if (sku.Length >= 6) return sku.Substring(3, 3);
        // SKU长度不足时返回空串,让它排到最后
        return string.Empty;
    })
    .ThenBy(sku => {
        // 提取第7-9位,转成int比较数值大小
        if (sku.Length >= 9 && int.TryParse(sku.Substring(6, 3), out int priority)) {
            return priority;
        }
        // 无效优先级返回最大值,让它排到组内最后
        return int.MaxValue;
    })
    .ToList();

排序后的结果会是:

XXXABC056LMN, XXXABC123XYZ, XXXDEF001UVW, XXXDEF023PQR

这里加了边界处理,避免SKU长度不够或优先级格式错误时抛出异常,你可以根据实际需求调整这些异常场景的处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:49:31