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

标签 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")
{
 return true;
}

问题是,我要比较的字符串的构建略有不同,因此它最终更像是:

if(stringWithPipes.Contains(beginning|middle2|middle||end)
{
 return true;
}

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

最佳答案

您可以在 | 上拆分字符串,然后拆分要比较的字符串,然后将 Enumerable.ExceptEnumerable.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;
    }
}

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

关于c# - 比较两个不同顺序的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865504/

相关文章:

java - 如何解决 Stripe xamarin 绑定(bind)错误? (CS0103 名称 'Start' 在当前上下文中不存在)

c# - 你如何像 C# 一样使用 C++ lambda

c# - ParallelEnumerable.Aggregate 用于多种方法

c# - WPF 以编程方式绑定(bind)

C# 相当于 VB6 'Type'

c - c中的strlen函数

javascript - 将 javascript 字符串中的所有字母和超过 2 个空格替换为空字符

PHP 多字节 str_replace?

java - 递归地反转短语

java - String.format 的语法在 IDEA 中如何实现可识别?