2017-03-06 53 views
1

我有一個字符串數組,如何檢查一個數組中的一個元素是否匹配或者是另一個數組中的一個元素的一部分?

string[] numbers= {"one","two","last"} 

我還有一個字符串數組,

string[] variables={"string one","int two","string three"} 

我怎樣才能variables陣列上numbers數組中的元素的元素。

因此我必須得到"string one","int two"元素。 我必須從variables數組中刪除這些元素,並將其餘元素存儲在新數組中。所以我的新陣列應該像,

string[] newarray={"string three"} 

我已經使用了下面的代碼。但無法得到確切的結果。

foreach (string variable in variables) 
{ 
if(!variable .Contains(numbers.Any()) 
    { 
     newarray.add(param); 
    } 
} 

在此先感謝。

回答

1

例如,你可以這樣做:

var result = variables.Where(v=>v.Split(' ').Any(s=>numbers.Contains(s))); 
1

你可以試試這個:

var newarray = variables.Where(v => !numbers.Any(n => v.IndexOf(n) >= 0).ToArray() 
1

的LINQ提供了你有這麼多的方式來做到這一點...你可以遵循的另一條道路:

var itemsToDiscard = variables.Zip(numbers, (f, s) => !f.Contains(s)).ToArray(); 
var newArray = variables.Where((_, i) => itemsToDiscard[i]).ToArray(); 

請注意,您的問題未指定。位置有意義嗎?以下是否找到匹配?

{"zero", "one", "two"} 
{"string one","int two","string three"} 

我建議的解決方案沒有,但是如果你希望它是如此的話,它還不是很清楚。如果順序並不重要,等效代碼如下:

var itemsToDiscard = numbers.Select(n => variables.All(s => !s.Contains(n))).ToArray(); 
var resultWithoutPosition = variables.Where((_, i) => itemsToDiscard[i]).ToArray(); 
+0

的位置在我的情況沒有關係。 – Malai

1
string[] numbers = { "one", "two", "last" }; 
string[] variables = { "string one", "int two", "string three" }; 
string[] newarray = variables.Where(v => !numbers.Any(n => v.Contains(n))).ToArray(); 
variables = variables.Where(v => numbers.Any(n => v.Contains(n))).ToArray(); 
0

試試這個

var result = variables.Except(variables.Intersect(numbers, new ContainsComparer())).ToArray(); 

有了這個

private class ContainsComparer : IEqualityComparer<string> { 
    public bool Equals(string x, string y) => y.Contains(x); 
    public int GetHashCode(string obj) => 0; 
} 
相關問題