2017-03-06 7 views
1
私は文字列の配列を持っている

配列の要素が一致するかどうか、またはc#の別の配列の要素の一部かどうかをチェックする方法は?

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

私は別の文字列配列を持って、

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

はどうすればnumbers配列の要素を持っているvariables配列の要素を取得することができます。

その結果、"string one","int two"要素を取得する必要があります。 そして、これらの要素をvariables配列から削除し、残りの要素を新しい配列に格納する必要があります。だから私の新しい配列は次のようになります。

string[] newarray={"string three"} 

私は次のコードを使用しました。しかし、正確な結果を得ることができませんでした。

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

ありがとうございました。

あなたが例えばこれを行うことができ

答えて

1

:ここ

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

あなたはこの1つを試みることができるしあなたはこれを行うための多くの方法を...あなたが従うことができるもう一つの道:

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(); 
1

とcsharpadのコードです:

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

位置とこの

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

を試してみてください。 – 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

は、私の場合には重要ではありません。この

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