2017-01-05 8 views
0

私は別のメソッドから文字列の配列を受け取るメソッドを持っています。 この配列には、日、moviegenresなどのいくつかの文字列が含まれています。 配列にmoviegenresが含まれているかどうかを確認する必要があります。ここ値が配列内にあるかどうかを確認してその値を使用する

は、私が今持っているものです。

if (eventsSelected.Contains("act") || 
       eventsSelected.Contains("adv") || 
       eventsSelected.Contains("ani") || 
       eventsSelected.Contains("doc") || 
       eventsSelected.Contains("dra") || 
       eventsSelected.Contains("hor") || 
       eventsSelected.Contains("mys") || 
       eventsSelected.Contains("rom") || 
       eventsSelected.Contains("sci") || 
       eventsSelected.Contains("thr")) 
      { 
       //get the value that is in the array contains. 
      } 

10の異なる値のための私のコードのチェックはどのように私は真である値を見つけることができますので?

配列に値「行為」が含まれているとします。その特定の値を取得するにはどうすればよいですか?

答えて

3
foreach(var match in new [] {"act", "adv"}.Where(eventsSelected.Contains)) 
{ 
    //do stuff 
} 

それとも、ただ最初のものは

var match = Array.Find(new[] { "act", "adv" }, eventsSelected.Contains); 
if (!string.IsNullOrEmpty(match)) 
{ 
    // If you just want the first match 
} 

matchフィールドは、あなたが探していたトークンが含まれている必要がある場合したがって、actまたはadvです。

+0

おかげでもう2番目の方法はすごくうまくいった! –

3

いずれかを使用し、複数のifかは、使用string[]Array.FindIndex

string[] tokens = {"adv", "ani", "doc" .... }; 
int index = Array.FindIndex(tokens, t => eventsSelected.Contains(t)); 
if(index >= 0) 
{ 
    Console.WriteLine("First value found was: " + tokens[index]) 
} 
+0

静的なArrayメソッドを使いたい場合は、 'index'値が決して実際に使われないので、' Array.Find'を使うことができます。 –

+0

@YuriyFaktorovich:まあ、それは利点がある、あなたは['Array.FindIndex(array、startIndex、predicate)'](https://msdn.microsoft.com/en-us/library/xhdxx3we(v = vs .110).aspx)を使用して、次の一致を検索します。あなたは単に '++ index'を渡す必要があります。 –

0

あなたはティムからの回答と同様にIntersect

var values = new[] {"act", "adv", "ani", etc}; 
var matches = values.Intersect(eventsSelected); 

//matches contains all matching values 
+0

これは等価比較を行いますが、OPのような 'Contains'ではありません。 –

+0

@PatrickHofman実際、私はそれがわからない。 eventsSelectedが配列の場合(そしてその名前が示唆している場合)、Containsは配列の各要素の等価性をテストします。 –

+0

合意。コードはあいまいです。 –

0

を使用するのではなく、配列関数よりも、LINQを使用してすることができます

string[] tokens = {"adv", "ani", "doc" .... }; 
string firstMatch = eventsSelected.FirstOrDefault(s => tokens.Contains(s)); 
if (firstMatch != null) 
{ 
    // Do something with firstMatch 
} 
0

私は助けるが、あなたの書いたことに気づくことができませんでしたトークンはソートされた順序で並べ替えることができます。それで面白いことができます:

string[] sortedTokens = {"act", "adv", "ani", ... }; 
int index = Array.FindIndex(eventsSelected, e => Array.BinSearch(sortedTokens, e) > 0) 

そして次にp今度は、indexeventsSelectedからの指数です。これはあなたにO(nlog(k))時間の複雑さを与えます。ここでnはeventsSelectedのサイズであり、kはトークンのサイズです(他の答えはO(nk)を与えます)。

関連する問題