[英]How to check if string contains a string in string array
編輯:順序可能會更改,如您在以下示例中看到的那樣,兩個字符串的名稱相同但順序不同。
在檢查兩個字符串數組是否匹配后如何處理?
下面的代碼返回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;
}
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));
這些不是字符串數組,而是兩個字符串。
因此,您實際上需要在檢查內容相等之前將它們拆分為子字符串。
您可以通過以下方式進行操作:
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)。 此外,為了節省內存,您可以對splits數組使用就地排序,即:
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單線。
嘗試
return (_exists.Length == _check.Length);
這將檢查字符串數組的長度是否相同,但值不一定相同。
如果要比較數組以查看它們是否完全相同,則需要首先執行上述操作,然后很可能將數組按AZ順序排序,然后比較每個元素
注意:這是不必要的...
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);
}
這是我從您的問題中了解的。
將字符串拆分成兩個列表,然后使用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
}
}
如果只想計算字符串,請嘗試:
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”來比較Enumerables
var result = ary1.SequenceEquals(ary2);
SeqenceEquals比較位置和值,因此,如果您還想檢測位置變化,請刪除OrderBy。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.