[英]find index of list with params c#
我基本上試圖轉換這個:
private int FindIndexOf(string valueOne, string valueTwo, List<string> list)
{
return list.FindIndex(s =>
s.ToLower().Contains(valueOne.ToLower()) &&
s.ToLower().Contains(valueTwo.ToLower())
);
}
使用這樣的參數:
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()));
}
我對RegEx不太滿意,我想不出在linq中實現這個的方法。 有什么建議?
你不需要正則表達式,你不需要ToLower
:
private int FindIndexOf(List<string> list, params string[] args)
{
return list
.FindIndex(s => args
.All(str => s.IndexOf(str, StringComparison.OrdinalIgnoreCase) >= 0));
}
為什么ToLower
可能不正確: https : ToLower
改用全部:
var argsLower = args.Select(q=> q.ToLower());
list.FindIndex(c => argsLower.All(x => c == x));
基於正則表達式的解決方案,用於記錄:
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.