检查值是否在数组中,然后使用该值

时间:2017-01-05 15:53:09

标签: c#

我有一个从另一个方法接收字符串数组的方法。 这个数组包含几个字符串,几天,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个不同的值,我怎样才能找出哪个值是真的?

所以,让我们说数组包含值" act"我该如何获得该特定值?

5 个答案:

答案 0 :(得分: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])
}

答案 1 :(得分: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字段包含您搜索的令牌,因此actadv

答案 2 :(得分:0)

您可以使用Intersect

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

//matches contains all matching values

答案 3 :(得分:0)

类似于Tim的回答,但是使用LINQ而不是Array函数:

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

答案 4 :(得分:0)

我忍不住注意到你已经按照排序的顺序编写了你的​​令牌,所以只是为了你可以做的乐趣:

import pandas as pd
import pandas_datareader.data as web
import datetime

start = datetime.date(2016, 12, 27)
end = datetime.date.today()

df = web.DataReader('AA', 'yahoo', start, end)

df

然后按照Tim的回答继续,除了这次,string[] sortedTokens = {"act", "adv", "ani", ... }; int index = Array.FindIndex(eventsSelected, e => Array.BinSearch(sortedTokens, e) > 0) 是来自index的索引。这给你O(nlog(k))时间复杂度,其中eventsSelected是eventsSelected的大小,n是标记的大小(其他答案给出O(nk),而不是重要)