[英]find index of list with params c#
I'm basically trying to convert this: 我基本上试图转换这个:
private int FindIndexOf(string valueOne, string valueTwo, List<string> list)
{
return list.FindIndex(s =>
s.ToLower().Contains(valueOne.ToLower()) &&
s.ToLower().Contains(valueTwo.ToLower())
);
}
to make use of params like this: 使用这样的参数:
private int FindIndexOf(List<string> list, params string[] args)
{
string pattern = String.Format("([{0}]+)", String.Join("]+[", args));
Regex regEx = new Regex(pattern, RegexOptions.IgnoreCase);
return list.FindIndex(s => regEx.IsMatch(s.ToLower()));
}
I'm not very good with RegEx and I can't think of a way to implement this in linq. 我对RegEx不太满意,我想不出在linq中实现这个的方法。 Any suggestions? 有什么建议?
You don't need regex and you don't need ToLower
: 你不需要正则表达式,你不需要ToLower
:
private int FindIndexOf(List<string> list, params string[] args)
{
return list
.FindIndex(s => args
.All(str => s.IndexOf(str, StringComparison.OrdinalIgnoreCase) >= 0));
}
Why ToLower
can be incorrect: https://stackoverflow.com/a/234751/284240 为什么ToLower
可能不正确: https : ToLower
Use All instead: 改用全部:
var argsLower = args.Select(q=> q.ToLower());
list.FindIndex(c => argsLower.All(x => c == x));
A regex-based solution, for the record: 基于正则表达式的解决方案,用于记录:
private int FindIndexOf(List<string> list, params string[] args)
{
string pattern = args.Aggregate(new StringBuilder(),
(sb, a) => sb.Append("(?=.*").Append(Regex.Escape(a)).Append(")")
).ToString();
Regex regEx = new Regex(pattern, RegexOptions.IgnoreCase);
return list.FindIndex(s => regEx.IsMatch(s));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.