簡體   English   中英

如何檢查字符串是否包含字符串數組中的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM