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

如何从字符串列表中筛选包含指定整数列表元素的项?

问题描述

现有字符串列表:

List<string> aStringList = new List<string>() {
                                                "meat1", "meat2",
                                                "tomato3", "tomatoes4",
                                                "brocolli5", "brocoli6"
                                               };

以及整数参数列表:

List<int> aIntList = new List<int>() { 1, 2, 6 };

需要生成仅包含meat1、meat2、brocoli6的新列表。当前写法硬编码索引判断,既不优雅也无动态性:

var matchingvalues = aStringList.Where(s => s.Contains(aIntList [0].ToString())
                                          || s.Contains(aIntList [1].ToString())
                                          || s.Contains(aIntList [2].ToString())
                                        );

求优化方案。

优化方案

方法1:用LINQ Any实现动态匹配

先将整数列表转为字符串集合,再通过Any判断字符串是否包含集合内任意元素,适配aIntList的任意长度变化:

var targetNumStrings = aIntList.Select(n => n.ToString()).ToList();
var matchingValues = aStringList.Where(s => targetNumStrings.Any(num => s.Contains(num)));

方法2:提取末尾数字精准匹配

如果字符串的数字固定在末尾,可提取数字后直接判断是否在目标整数列表中,避免中间包含数字导致的误匹配(比如meat12不会被错误匹配):

var matchingValues = aStringList.Where(s => 
{
    // 提取字符串末尾的连续数字
    var numSegment = new string(s.Reverse().TakeWhile(char.IsDigit).Reverse().ToArray());
    return int.TryParse(numSegment, out int num) && aIntList.Contains(num);
});

方法3:预编译正则表达式(高频场景适用)

若需多次执行匹配,可预编译包含目标数字的正则表达式,提升性能:

var numPattern = string.Join("|", aIntList.Select(n => Regex.Escape(n.ToString())));
var matchRegex = new Regex($@"{numPattern}$", RegexOptions.Compiled); // $确保匹配末尾数字
var matchingValues = aStringList.Where(s => matchRegex.IsMatch(s));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:04:57