我有一个包含字符串列表的字典,每个字符串看起来像:
"beginning|middle|middle2|end"
现在我想要的是这样做:
List<string> stringsWithPipes = new List<string>();
stringWithPipes.Add("beginning|middle|middle2|end");
...
if(stringWithPipes.Contains("beginning|middle|middle2|end")
{
return true;
}
问题是,我正在比较它的字符串略有不同,所以最终更像是:
if(stringWithPipes.Contains(beginning|middle2|middle||end)
{
return true;
}
显然这最终是假的。但是,我想要考虑它是真的,因为它只是不同的顺序。 我该怎么办?
答案 0 :(得分:2)
您可以在|
上拆分字符串,然后拆分要比较的字符串,然后使用Enumerable.Except
和Enumerable.Any
一样
List<string> stringsWithPipes = new List<string>();
stringsWithPipes.Add("beginning|middle|middle2|end");
stringsWithPipes.Add("beginning|middle|middle3|end");
stringsWithPipes.Add("beginning|middle2|middle|end");
var array = stringsWithPipes.Select(r => r.Split('|')).ToArray();
string str = "beginning|middle2|middle|end";
var compareArray = str.Split('|');
foreach (var subArray in array)
{
if (!subArray.Except(compareArray).Any())
{
//Exists
Console.WriteLine("Item exists");
break;
}
}
这肯定可以优化,但以上是一种方法。
答案 1 :(得分:1)
试试这个::
if(stringWithPipes.Any(P => P.split('|')
.All(K => "beginning|middle2|middle|end".split('|')
.contains(K)))
希望这会有所帮助!!
答案 2 :(得分:0)
这应该有效。
List<string> stringsWithPipes = new List<string>();
stringsWithPipes.Add("beginning|middle|middle2|end");
string[] stringToVerifyWith = "beginning|middle2|middle||end".Split(new[] { '|' },
StringSplitOptions.RemoveEmptyEntries);
if (stringsWithPipes.Any(s => !s.Split('|').Except(stringToVerifyWith).Any()))
{
return true;
}
拆分将删除由双打|
创建的所有空条目。然后,如果使用Except
方法删除每个公共元素,则检查剩下的内容。如果没有任何内容(! [...] .Any()
,.Count() == 0
也有效),它们都包含相同的元素。
答案 3 :(得分:0)
您需要在分隔符上拆分:
var searchString = "beginning|middle|middle2|end";
var searchList = searchString.Split('|');
var stringsWithPipes = new List<string>();
stringsWithPipes.Add("beginning|middle|middle2|end");
...
return stringsWithPipes.Select(x => x.Split('|')).Any(x => Match(searchList,x));
然后您可以通过多种方式实现匹配
首先必须包含所有搜索短语,但可以包含其他搜索短语。
bool Match(string[] search, string[] match) {
return search.All(x => match.Contains(x));
}
或者必须是所有搜索词组都不能包含其他词组。
bool Match(string[] search, string[] match) {
return search.All(x => match.Contains(x)) && search.Length == match.Length;
}