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 来执行此操作,但我不确定。

任何帮助将不胜感激。

保罗

4

3 回答 3

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 操作类型,并提供额外的灵活性和更快的查找时间。

于 2013-04-30T02:19:59.770 回答
0

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

var i = 0;

someActions.ForEach(x =>
                        {
                            if (someActions.Contains(contains[i]))
                               callRoutine(actions[i]);
                            i++;
                        });
于 2013-04-30T02:08:10.647 回答
0
someActions.Intersect(contains).ForEach(callRoutine);

或者

someActions.Intersect(contains).ForEach(i=>callRoutine(i));
于 2013-04-30T02:16:49.987 回答