使用LINQ使用数组作为参数列表搜索列表

时间:2013-04-30 01:24:53

标签: linq c#-4.0

我目前有一些看起来像这样的代码

string[] contains = new string[]{"marge", "homer", "lisa", "bart", "maggie"};
string[] actions = new string[]{"get dye", "mmm beer", "blow saxophone", "have a cow", "bang"};

for (int i = 0; i < someActions.Count; ++i)
{
  if (someActions.Contains(contains[i]))
    callRoutine(actions[i]);
}

(这是一个非常简单的例子 - someActions是一个列表)

我想知道LINQ是否有办法像循环一样做?

我正在考虑的事情
int i = position in contains or 0
callRoutine(actions[i]);

问题是我不知道如何使用数组作为搜索参数。各种搜索建议我需要使用IEnumerable来做到这一点,但我不确定。

这里有任何帮助。

3 个答案:

答案 0 :(得分:1)

这对您当前的数据设置无效。

如果您对数据保持灵活性,可以试试这个:

var namesToActions = new Dictionary<string, string>()
    {
        { "marge" , "get dye" },
        { "homer", "mmm beer"},
        { "lisa", "blow saxophone"},
        { "bart", "have a cow"},
        { "maggie", "bang"}
    };

someActions.ForEach(a => callRoutine(namesToActions[a]));

切换到词典可以更轻松地执行您正在寻找的Linq动作类型,并提供额外的灵活性和更快的查找时间。

答案 1 :(得分:0)

我不确定你的目的是什么,但是如果你想将for循环转换为linq语句,你可以这样做:

var i = 0;

someActions.ForEach(x =>
                        {
                            if (someActions.Contains(contains[i]))
                               callRoutine(actions[i]);
                            i++;
                        });

答案 2 :(得分:0)

someActions.Intersect(contains).ForEach(callRoutine);

OR

someActions.Intersect(contains).ForEach(i=>callRoutine(i));