2

我有一个字典,其中包含一个字符串列表,每个字符串看起来像:

"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;
}

显然这最终是错误的。但是,我想认为这是真的,因为它只是顺序不同。我能做些什么?

4

4 回答 4

2

您可以拆分您的字符串|,然后拆分要比较的字符串,然后Enumerable.ExceptEnumerable.Anylike一起使用

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;
    }
}

这当然可以优化,但以上是一种方法。

于 2013-07-25T18:14:13.667 回答
1

试试这个::

if(stringWithPipes.Any(P => P.split('|')
                             .All(K => "beginning|middle2|middle|end".split('|')
                             .contains(K)))

希望这会有所帮助!

于 2013-07-25T18:12:24.197 回答
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;
}

Split 将删除由 doubles 创建的任何空条目|。然后,如果使用该方法删除每个常见元素,则检查剩下的内容Except。如果什么都没有(! [...] .Any(),.Count() == 0也有效),它们都包含相同的元素。

于 2013-07-25T18:22:08.993 回答
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;
 }
于 2013-07-25T18:25:00.297 回答