[英]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.