簡體   English   中英

是否有等效於“String.IndexOf(String[])”的函數?

[英]Is there a function equivalent to "String.IndexOf(String[])"?

是否有任何函數返回給定數組中第一次出現任何字符串的索引,例如: String.IndexOf(String[])

或者我需要一個自定義函數嗎?

例如下面的函數

 "AppleBananaCherry".IndexOf(new[] {"Banana", "Cherry"});

 "AppleBananaCherry".IndexOf(new[] {"Cherry", "Banana"});

返回 5

沒有准備好的功能,但你可以使用這樣的東西,

var sample = "AppleBananaCherry";
var input = new[] { "Cherry", "Banana" };
var result = input.Min(x => sample.IndexOf(x));

如果樣本沒有任何輸入項,則返回-1

沒有內置函數, String.IndexOf()方法只接受單個字符串或char作為參數,但您可以編寫自己的擴展方法,該方法對數組中的每個項目使用IndexOf ,如下例所示。 它還應該從中間結果中正確排除-1

public static class Ext
{
    public static int IndexOf(this string thisString, string[] values)
    {
        var index = thisString.Length;
        var isFound = false;
        foreach (var item in values)
        {
            var itemIndex = thisString.IndexOf(item, StringComparison.InvariantCulture);
            if (itemIndex != -1 && itemIndex < index)
            {
                index = itemIndex;
                isFound = true;
            }
        }

        return isFound ? index : -1;
    }
}

使用示例

var index = "AppleBananaCherry".IndexOf(new[] {"Banana", "Cherry"}); //returns 5
index = "AppleBananaCherry".IndexOf(new[] { "Cherry", "Banana" }); //returns 5

這應該

public static int IndexOf(this string s, string[] values) {
    var found = values
        .Select(v => s.IndexOf(v))
        .Where(index => index >= 0)
        .OrderBy(v => v)
        .Take(1)
        .ToList();
    return found.Count > 0 ? found[0] : -1;
}

編輯:刪除 -1 值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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