我怎么看? string1包含string2 OR string2包含string1 OR 字符串3包含字符串1 OR 字符串1包含字符串3 OR 字符串2包含字符串3 OR 字符串3包含单行字符串2?
像我想做的那样if ( string1.contains(string2) || string2.contains(string1) || string3.contains(string1) string3.contains(string2) || .. and so on.. )
{
}
单次检查没有或条款。 实际上,我必须多次和多个地方进行检查。所以只是想知道是否有更好的方法。
我已经更新了我的业务逻辑或这个逻辑的原因。我们有6个站点,我们将只获取站点的页面名称。我必须检查网站名称是否相似。唯一的问题是..我不知道任何特定模式的网站名称。比如:
String1 = "/search-results"
string2= "www.foo.com/search-results?Id=1234"
string3 = "search-results"
string4= "/search-results?Id=1234"
如果你看看我的值,你会注意到如果你将任何两个字符串与OR子句进行比较......它们将是真的。
答案 0 :(得分:3)
将字符串放入数组或列表中,然后:
bool result = yourStrings
.Where((x, idx) =>
yourStrings.Where((y, index) => idx != index && x.Contains(y))
.Any())
.Any();
<强>解释强>
此查询将获取每个字符串,并将它们与其他字符串进行比较,并返回一个结果,指示任何字符串是否包含集合中的另一个字符串。
例如,我们假设我们有三个字符串foo
,bar
和fooBar
,步骤如下:
"foo"
并检查其是否包含bar
或fooBar
(false)"bar"
并检查其是否包含foo
或fooBar
(false)"fooBar"
并检查其是否包含foo
或bar
(因为foo
而为真)我希望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;
}
答案 1 :(得分:-1)
您可以使用辅助方法并使用它:
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();