[英]how to check string.contains Either Ways
如何查看string1包含string2或string2包含string1或String 3包含字符串1或String 1包含字符串3或String 2包含字符串3或String 3包含字符串2在單行中?
就像我想做的
if ( string1.contains(string2) || string2.contains(string1) || string3.contains(string1) string3.contains(string2) || .. and so on.. )
{
}
在沒有or子句的單檢查中。 實際上,我必須多次多次進行此檢查。 因此,只是想知道是否有更好的方法。
我已經更新了我的業務邏輯或這種邏輯的原因。 我們有6個站點,我們將僅獲得站點的頁面名稱。 我必須檢查站點名稱是否相似。 唯一的問題是..我沒有以任何特定模式獲得站點名稱。 例如:
String1 = "/search-results"
string2= "www.foo.com/search-results?Id=1234"
string3 = "search-results"
string4= "/search-results?Id=1234"
如果查看我的值,您會注意到,如果將任何兩個字符串與OR子句進行比較,則它們為true。
將您的字符串放入數組或列表中,然后:
bool result = yourStrings
.Where((x, idx) =>
yourStrings.Where((y, index) => idx != index && x.Contains(y))
.Any())
.Any();
說明:
該查詢將獲取每個字符串,並將它們與其他字符串進行比較,並返回一個結果,該結果指示該字符串中的任何字符串是否包含集合中的另一個字符串。
例如, fooBar
我們有三個字符串foo
, bar
和fooBar
,步驟將如下所示:
"foo"
檢查其是否包含bar
或fooBar
(假) "bar"
並檢查其是否包含foo
或fooBar
(假) "fooBar"
並檢查它是否包含foo
或bar
(由於foo
而為true) 我希望有一個接受index參數的Any
重載...
編輯:對於較大的集合,這也是更有效的實現:
public static bool ContainsAny(IList<string> source)
{
int count = source.Count;
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count; j++)
{
if (i != j && source[i].Contains(source[j]))
{
return true;
}
}
}
return false;
}
您可以使用一個輔助方法並使用它:
public static void SomeContainsAnOther(this IEnumerable<string> @this)
{
@this.Any(v=>@this.Count(other=>other.Contains(v)) > 1);
}
並使用它:
new string[] {string1,string2,string3,..stringN}.SomeContainsAnOther();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.