c#在列表中查找关键字,并根据找到的项创建新列表

本文关键字:列表 创建 新列表 查找 关键字 | 更新日期: 2023-09-27 18:15:13

我正在学习c#,有以下问题,我找不到解决方案。

我正在尝试的代码是:

string theString = "aaa XXX,bbb XXX,ccc XXX,aaa XXX";          
List<string> listFromTheString= new List<string>(theString.Split(','));           
List<string> listOfFoundItems = new List<string>();
for (int i = 0; i < (listFromTheString.Count); i++)
{
    if(listFromTheString[i].Contains("aaa"))
    {
        listOfFoundItems.Add(listFromTheString[i]);
    }   
}

如果找到一个特殊的关键字,我想遍历列表并在新列表中创建新项目。列表listOfFoundItems没有被填满。

你能给我提示一下我做错了什么吗?

c#在列表中查找关键字,并根据找到的项创建新列表

您可以使用LINQ:

更简洁地完成此任务。
        string theString = ("aaa XXX,bbb XXX,ccc XXX,aaa XXX");
        List<string> listFromTheString = new List<string>(theString.Split(','));
        List<string> listOfFoundItems = listFromTheString.Where(s => s.Contains("aaa")).ToList();

您提供的代码可以工作。

这里有一个替代的,一行的版本:

List<string> listOfFoundItems = theString.Split(',').Where(s => s.Contains("aaa")).ToList();
theString.Split(',').Where(p=>p.Contains("aaa")).ToList()

我知道你想修正你的算法,但是一旦你这么做了,考虑一下这个表达式:

listofFoundItems = (from s in theString.Split(',')
                    where s.Contains("aaa")
                    select s).ToList();

您提供的代码可以正常工作。鉴于此,我怀疑您可能有一些字符串比较问题。

下面的代码可能更适合你:

const string given = "aaa XXX,bbb XXX,ccc XXX,aaa XXX";
var givenSplit = new List<string>(given.Split(','));
var listOfFoundItems = new List<string>();
foreach(var item in givenSplit.Where(g => g.IndexOf("aAa", StringComparison.InvariantCultureIgnoreCase) > -1))
{
    listOfFoundItems.Add(item); 
}
// two items are added
    string theString = ("aaa XXX,bbb XXX,ccc XXX,aaa XXX");
    List<string> listFromTheString = new List<string>(theString.Split(','));
    List<string> listOfKeywords = new List<string> { "aaa" };
    List<string> found = (from str in listFromTheString
                         where listOfKeywords.Any(keyword => str.Contains(keyword))
                         select str).ToList<string>();