如何检查字符串是否包含字符串数组中的字符串

时间:2012-09-27 21:30:49

标签: c# linq

编辑:订单可能会发生变化,如下图所示,这两个字符串具有相同的名称但订单不同....

检查两个字符串数组是否匹配后你会怎么做?

下面的代码返回true但实际上它应该返回false,因为我在_check

中有额外的字符串数组

我想要实现的是检查两个字符串数组是否具有相同数量的字符串。

string _exists  = "Adults,Men,Women,Boys";
string  _check = "Men,Women,Boys,Adults,fail";

if (_exists.All(s => _check.Contains(s))) //tried Equal 
{
  return true;
}
else
{
  return false;
}

7 个答案:

答案 0 :(得分:3)

string _exists  = "Adults,Men,Women,Boys";
string  _check = "Men,Women,Boys,Adults,fail";

bool b = _exists.Split(',').OrderBy(s=>s)
                .SequenceEqual(_check.Split(',').OrderBy(s=>s));

答案 1 :(得分:2)

这些不是字符串数组,而是两个字符串 因此,在检查内容相等性之前,您实际上需要将它们拆分为子字符串。

你可以这样做:

string _exists = "Adults,Men,Women,Boys";
string _check = "Men,Women,Boys,Adults,fail";

var checks = _check.Split(',');
var exists = _exists.Split(',');

bool stringsEqual = checks.OrderBy(x => x).SequenceEqual(exists.OrderBy(x => x));

为了加快一些特殊情况,你可以在调用LINQ代码之前检查长度(在不同长度的情况下避免使用两个OrderBy)。此外,为了节省内存,您可以在拆分数组上使用就地排序,即:

string _exists = "Adults,Men,Women,Boys";
string _check = "Men,Women,Boys,Adults,fail";

var checks = _check.Split(',');
var exists = _exists.Split(',');

if(checks.Length != exists.Length)
    return false;

Array.Sort(checks);
Array.Sort(exists);

if (checks.SequenceEqual(exists))
    return true;
return false;

显然,只有当你的字符串非常长时,这些优化才有用,否则你可以简单地使用LINQ单行。

答案 2 :(得分:0)

return (_exists.Length == _check.Length);

这将检查字符串数组是否具有相同的长度,但不一定是相同的值。

如果你想比较数组以确定它们是否完全相同,你需要首先进行上述操作,然后很可能将数组排序为A-Z顺序,并比较每个元素

注意:这是不必要的......

if (_exists.All(s => _check.Contains(s))) //tried Equal 
{
  return true;
}
else
{
  return false;
}

......你可以做到这一点,而且它更优雅......

return (_exists.All(s => _check.Contains(s)));

答案 3 :(得分:0)

如果要查看逗号分隔的子串数是否相同,请使用此。

public bool StringsHaveSameNumberOfSubstring(string _exists, string _check)
{
     return (_exists.Split(',').Length == _check.Split(',').Length);
}

这是我从你的问题中理解的。

答案 4 :(得分:0)

拆分字符串以制作两个列表,然后使用Linq与Objects

进行比较
string _exists  = "Adults,Men,Women,Boys";
string  _check = "Men,Women,Boys,Adults,fail";


List<string> exists = new List<string>(_exists.Split(new char[] { ',' }));
List<string> check = new List<string>(_check.Split(new char[] { ',' }));

foreach(string toCheck in check){
if(exists.Contains(toCheck)){
  //do things
}
}

答案 5 :(得分:0)

如果您只想计算字符串,请尝试:

bool sameAmountOfStrings = _exists.Count(c => c.Equals(',')) == _check.Count(c => c.Equals(,));

答案 6 :(得分:0)

首先,您需要拆分字符串以获取数组并对其进行排序

var ary1 = _existing.Split(',').Trim().OrderBy(x => x);
var ary2 = _check.Split(',').Trim().OrderBy(x => x);

现在您可以使用'SequenceEquals'来比较Enumerables

var result = ary1.SequenceEquals(ary2);

SeqenceEquals比较位置和值,所以如果你想检测位置变化,请将OrderBy重新进行。