编辑:订单可能会发生变化,如下图所示,这两个字符串具有相同的名称但订单不同....
检查两个字符串数组是否匹配后你会怎么做?
下面的代码返回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;
}
答案 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重新进行。