簡體   English   中英

用params c#查找列表索引

[英]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可能不正確: httpsToLower

改用全部:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM