Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较两个不同顺序的字符串_C#_String - Fatal编程技术网

C# 比较两个不同顺序的字符串

C# 比较两个不同顺序的字符串,c#,string,C#,String,我有一本字典,上面有一个字符串列表,每个字符串看起来像: "beginning|middle|middle2|end" 现在我想做的是: List<string> stringsWithPipes = new List<string>(); stringWithPipes.Add("beginning|middle|middle2|end"); ... if(stringWithPipes.Contains("beginning|middle|middle2|end"

我有一本字典,上面有一个字符串列表,每个字符串看起来像:

"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.Any(P => P.split('|')
                             .All(K => "beginning|middle2|middle|end".split('|')
                             .contains(K)))

希望这会有帮助

您可以在
|
上拆分字符串,然后拆分要比较的字符串,然后使用
可枚举。除了
可枚举。任何类似的

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;
    }
}
List stringsWithPipes=new List();
stringsWithPipes.添加(“开始|中间|中间2 |结束”);
stringsWithPipes.Add(“开始|中间|中间3 |结束”);
stringsWithPipes.Add(“开始|中间2 |中间|结束”);
var array=stringsWithPipes.Select(r=>r.Split(“|”).ToArray();
string str=“开始|中间2 |中间|结束”;
var comparararray=str.Split(“|”);
foreach(阵列中的var子阵列)
{
if(!subArray.Except(compareArray).Any())
{
//存在
Console.WriteLine(“项目存在”);
打破
}
}
这当然是可以优化的,但以上是一种方法

这应该行得通

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;
}
List stringsWithPipes=new List();
stringsWithPipes.添加(“开始|中间|中间2 |结束”);
string[]stringToVerifyWith=“开始|中间2 |中间| | |结束”。拆分(新[]{'.},
StringSplitOptions.RemoveEmptyEntries);
if(stringsWithPipes.Any(s=>!s.Split(“|”)。除了(stringToVerifyWith).Any())
{
返回true;
}

拆分将删除由Double创建的所有空条目
|
。然后,使用
方法删除每个公共元素(除了
之外),检查剩下的内容。如果什么都没有剩下(the
![…].Any()
.Count()==0
也将有效),它们都包含相同的元素。

您需要在delimeter上拆分:

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

为什么要将其存储为
字符串列表
?例如,为什么它不是一个字符串列表?如果不同顺序的管道表示不同的内容,
string
不是存储组合的正确方法。请在“|”上拆分,删除空值,并验证两个数组是否包含相同的项我认为您要否定除
之外的
。这是
如果(!subArray.Except(comparararray.Any())
。如果两个集合包含相同的元素,则
Except
列表应为空。还是我糊涂了?@JimMischel,不,你没有糊涂,你完全正确。放置
before
Any
这看起来很棒,但它从未在列表中找到值。虽然它很干净,但我希望它能工作。有多个错误,所以它甚至无法编译,而且它永远也找不到结果,或者你的LINQ是错误的。这是行不通的。如果
Intersect.Count()
返回0,则表示没有匹配项。您需要检查计数是否等于要比较的字符串中的项目计数。其次,如果您发现自己正在编写
if(foo.Count()==0)
,则应将其替换为
if(!foo.Any())
Count()
可能需要枚举整个列表
Any()
最多只需检查一个。
 bool Match(string[] search, string[] match) {
    return search.All(x => match.Contains(x)) && search.Length == match.Length;
 }