我有一个从另一个方法接收字符串数组的方法。 这个数组包含几个字符串,几天,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"我该如何获得该特定值?
答案 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
字段包含您搜索的令牌,因此act
或adv
。
答案 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),而不是重要)