在List LinQ中查找所有匹配项

时间:2015-02-27 11:28:23

标签: c# arrays linq list

鉴于这种情况,我从包含ID的文件中获取了一个字符串数组 可以用各种字符分隔,“”:等
我想使用LinQ获取一个新列表/数组中的每个字符串,其中包含任何给定的分隔符 我目前正以相当不方便的方式这样做

string[] separator = { " ", ",", ";", ".", ":", "/" };
string[] arr = { };
listExceptions = someSource;
List<string> entrysWithSeparator=
(from s in listExceptions where (ContainsAny(s,separator) == true) select s).ToList(); 
//ContainsAny returns a bool, if any of the separators was found in the string
List<string> tmpExceptions = listExceptions.ToList();

foreach (string s in entrysWithSeparator)
{                
    arr = s.Split(separator, StringSplitOptions.RemoveEmptyEntries);
    tmpExceptions.AddRange(arr.ToList());
}
listExceptions = new string[listExceptions.Count()-1];
listExceptions = tmpExceptions.Distinct().ToArray();

2 个答案:

答案 0 :(得分:1)

您应该能够使用SelectMany

组合查询和循环
listExceptions = listExceptions
    .Where(s => ContainsAny(s,separator))
    .SelectMany(s => s.Split(separator, StringSplitOptions.RemoveEmptyEntries))
    .ToArray();

我假设您在查询中使用ContainsAny方法similar to this one

答案 1 :(得分:0)

var result = list.SelectMany(s => 
                s.Split(separator, StringSplitOptions.RemoveEmptyEntries))
             .Distinct();

不需要ContainsAny,因为不包含分隔符的字符串上的Split()也会返回字符串本身。