带拆分的字符串列表



我有一个字符串和一个字符串列表。我正在尝试返回一个列表,无论 strList 包含在 str 中,结果都应该是 4 和 21。

这是我的代码,不确定我错过了什么。

string str= "21,1,4";
List<string> strList= new List<string> { "4","21" };
var a = str.Where(i => i.ToString().Split(new char[] { ',' },StringSplitOptions.RemoveEmptyEntries).ToList().Any(s=>strList.Contains(s)));
    string str = "21,1,4";
    List<string> strList = new List<string> { "4", "21" };
    var splitStr = str.Split(',');
    var result = splitStr.Where(x => strList.Contains(x));
string str= "21,1,4";
List<string> strList= new List<string> { "4","21" };
string[] result = str.Split(',');
foreach(string s in result)
   if(strList.Contains(s))
      Console.WriteLine(s);

让它变得简单。

将所有内容保持在一行上,这似乎是您的目标:

string str = "21,1,4";
List<string> strList = new List<string> { "4", "21" };
var a = str.Split(',').Where(s => strList.Contains(s));

a将是 str 中包含的所有值(拆分后)的 IEnumerable,这些值包含在 strList 中。

你可以只使用Intersect

string str = "21,1,4";
List<string> strList = new List<string> { "4", "21" };
var result = str.Split(',').Intersect(strList);
Console.WriteLine(string.Join(", ", result));

输出:

21, 4

代码的问题在于,通过执行str.Where,您将迭代字符串的字符。 相反,您应该拆分str然后迭代以查找strList中的匹配项。

你可以做

string str = "21,1,4";
List<string> strList = new List<string> { "4", "21" };
List<string> splitList = str.Split(",").ToList();
List<string> overlap = strList.Where(str => splitList.Contains(str)).ToList();
        var str = "21,1,4";
        var otherStrList = new List<string> { "4", "21" };
        var separatedstrList = str.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
        var commonStrings = separatedstrList.Intersect(otherStrList);

commonStrings是您正在寻找的答案。

优雅的 Join 语法怎么样:

var results = (from main in str.Split(',')
                join key in strList
                on main equals key
                select main).ToList();
如果要

删除重复项(如果str有重复项),可以在.ToList()之前添加.Distinct()

相关内容

  • 没有找到相关文章

最新更新