Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq - Fatal编程技术网

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

C# 如何检查字符串数组中是否包含字符串,c#,linq,C#,Linq,编辑:正如您在下面的示例中看到的,顺序可能会改变,两个字符串的名称相同,但顺序不同 检查两个字符串数组是否匹配后,您将如何处理 下面的代码返回true,但实际上它应该返回false,因为我在\u检查中有额外的字符串数组 我试图实现的是检查两个字符串数组是否具有相同数量的字符串 string _exists = "Adults,Men,Women,Boys"; string _check = "Men,Women,Boys,Adults,fail"; if (_exists.All(s =&

编辑:正如您在下面的示例中看到的,顺序可能会改变,两个字符串的名称相同,但顺序不同

检查两个字符串数组是否匹配后,您将如何处理

下面的代码返回true,但实际上它应该返回false,因为我在
\u检查中有额外的字符串数组

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

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

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

如果要比较数组以查看它们是否完全相同,则需要首先执行上述操作,然后很可能将数组按A-Z顺序排序,并比较每个元素

注意:这是不必要的

if (_exists.All(s => _check.Contains(s))) //tried Equal 
{
  return true;
}
else
{
  return false;
}
…你可以这样做,而且更优雅

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

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

如果要比较数组以查看它们是否完全相同,则需要首先执行上述操作,然后很可能将数组按A-Z顺序排序,并比较每个元素

注意:这是不必要的

if (_exists.All(s => _check.Contains(s))) //tried Equal 
{
  return true;
}
else
{
  return false;
}
…你可以这样做,而且更优雅

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

如果要查看由逗号分隔的子字符串的数量是否相同,请使用此选项

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

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

如果你想知道用逗号分隔的子字符串的数量是否相同,那么使用这个

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

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

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

您可以这样做:

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 one liner即可。

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

您可以这样做:

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 one liner即可。

将字符串拆分成两个列表,然后使用LINQ与对象进行比较

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
}
}
string\u exists=“成年人、男人、女人、男孩”;
string\u check=“男人、女人、男孩、成年人、失败”;
List exists=新列表(_exists.Split(新字符[]{',}));
列表检查=新列表(_check.Split(new char[]{',}));
foreach(用于签入检查的字符串){
如果(存在。包含(检查)){
//做事
}
}

将字符串拆分成两个列表,然后使用Linq对对象进行比较

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
}
}
string\u exists=“成年人、男人、女人、男孩”;
string\u check=“男人、女人、男孩、成年人、失败”;
List exists=新列表(_exists.Split(新字符[]{',}));
列表检查=新列表(_check.Split(new char[]{',}));
foreach(用于签入检查的字符串){
如果(存在。包含(检查)){
//做事
}
}

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

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

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

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

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

var ary1 = _existing.Split(',').Trim().OrderBy(x => x);
var ary2 = _check.Split(',').Trim().OrderBy(x => x);
现在您可以使用“SequenceEquals”来比较可枚举项

var result = ary1.SequenceEquals(ary2);

SequenceEquals比较位置和值,因此如果您还想检测位置更改,请删除OrderBy。

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

var ary1 = _existing.Split(',').Trim().OrderBy(x => x);
var ary2 = _check.Split(',').Trim().OrderBy(x => x);
现在您可以使用“SequenceEquals”来比较可枚举项

var result = ary1.SequenceEquals(ary2);

SequenceEquals比较位置和值,因此如果您还想检测位置更改,请删除OrderBy。

非常好!,order by有助于消除由重复字符串标记引起的歧义。1+这是我一直在寻找的:)非常好!,order by有助于消除由重复字符串标记引起的歧义。1+这就是我要找的:)相同数量的字符串?我猜你指的是相同的字符串?!如果顺序不重要,字符串出现的频率是否重要(例如,第一个包含两次“Men”,第二个仅包含一次?大小写是否重要?字符串是否可能包含逗号?@Tim,相同数量的字符串意味着如果存在,则有5个字符串(一、二、三……),那么检查也应该有5个字符串(二,一,三…)看到LB的答案,我想我得到了我想要的。相同数量的字符串?我想你是指相同的字符串?!如果顺序不重要,那么字符串出现的频率是否重要(例如,第一个包含“人”两次,第二个只包含一次?大小写是否重要?一个字符串是否可能包含逗号?@Tim,相同数量的字符串意味着,如果存在5个字符串(1,2,3…),那么检查也应该有5个字符串(2,1,3…),请参见LB答案,我想我找到了我想要的。