鉴于这种情况,我从包含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();
答案 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()也会返回字符串本身。