c#在列表中查找关键字并从找到的项目中创建新列表

时间:2011-11-17 17:02:52

标签: c# list

我正在学习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没有填充创建者。

你能不能给我一个暗示我做错了什么?

5 个答案:

答案 0 :(得分:2)

您可以使用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();

答案 1 :(得分:1)

theString.Split(',').Where(p=>p.Contains("aaa")).ToList()

答案 2 :(得分:0)

我知道你想要修复你的算法,但是一旦你这样做,考虑使用这个表达式:

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

答案 3 :(得分:0)

您提供的代码运行正常。鉴于此,我怀疑你可能会遇到一些字符串比较问题。

此代码可能更适合您:

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

答案 4 :(得分:0)

    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>();