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