2012-09-27 98 views
1

編輯:的順序可能會改變,你可以在下面的例子中看到,這兩個字符串具有相同的名稱,但不同的順序....如何檢查是否字符串包含字符串數組字符串

你將如何檢查後看看兩個字符串數組是否匹配?

下面的代碼返回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

_字符串的數量?我假設你的意思是_same strings_而不是?!如果順序無關緊要,那麼它是否會出現字符串發生的頻率(第一個包含「Men」兩次,第二個包含它只是一次?)這個問題很重要嗎?字符串是否可能包含逗號? –

+0

@Tim,相同數量的字符串表示如果_exists有5個字符串(一,二,三....),那麼_check也應該有5個字符串(兩個,一個,三個......)查看LB答案,我想我得到我想要的東西 –

回答

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)); 
+0

簡單而優雅!+ 1 – series0ne

+0

非常好,順序通過幫助清除由重複的字符串標記導致的含糊不清。 –

+0

1+這是我一直在尋找:) –

0

嘗試

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

這將檢查字符串數組的長度相同,但不一定是相同的值。

如果要比較的陣列,看看他們是否有你需要做上述第一,那麼最有可能的排列爲AZ順序排序,比較每個元素

注完全一樣:這是不必要的...

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

...你可以如果你想看看用逗號分隔子的數目爲t做到這一點,它更優雅......

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

他一樣,然後用這個。

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

這是我從你的問題中瞭解到的。

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代碼(避免在不同長度的情況下,兩個排序依據的)之前檢查的長度。此外,爲了節省內存,你可以使用就地排序上劈叉陣列,即:

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去單襯墊。

0

分割字符串,使兩個列表,後來他們使用LINQ to對象

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 
} 
} 
0

比較,如果你只是想數字符串嘗試:

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

首先你需要分割字符串以獲取數組並排序它們

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

現在你可以使用「SequenceEquals的」比較可枚舉

var result = ary1.SequenceEquals(ary2); 

SeqenceEquals比較的地位和價值,所以如果你想檢測位置的變化,以及,remoce的排序依據。

相關問題