C# Lambda表达式到负两个字符串数组

C# Lambda表达式到负两个字符串数组,c#,lambda,C#,Lambda,我正在尝试对两个字符串数组执行SQL减号的等价操作。以下是我试图复制的代码: string returnValue = ""; foreach (string eachWord in allWords) { foreach (string ignoreWord in ignoreWords) { if (eachWord != ignoreWord)

我正在尝试对两个字符串数组执行SQL减号的等价操作。以下是我试图复制的代码:

        string returnValue = "";
        foreach (string eachWord in allWords)
        {
            foreach (string ignoreWord in ignoreWords)
            {
                if (eachWord != ignoreWord)
                {
                    returnValue += eachWord;
                }
            }
        }
我想将其改写为:

returnValue = allWords.Minus(ignoreWords);

或者同样简洁的东西。我意识到在幕后,我最终会得到同样的代码,但我只是学究

如果只希望字符串而不是
IEnumerable
,可以这样做:

returnValue = allWords.Except(ignoreWords);
var res = allWords.Except(ignoreWords);
string concatenatedStr =  string.Join(",", res.ToArray());
然后呢,

StringBuilder sb = new StringBuilder();
       res.ForEach(item => sb.Append(item));
        string ss = sb.ToString();
或者,如果您需要一些分隔符,您可以这样做:

var res = allWords.Except(ignoreWords);
string concatenatedStr =  string.Join(",", res.ToArray());
在幕后你不会得到同样的代码。您的代码是O(M*N),其中M是
allWords
的大小,N是
ignoreWords
的大小。使用一个更正确实现的算法(例如,Linq的
中使用的算法除外),您可以得到O(N+M)。关键是将一个集合存储在一个HashSet中,该集合有O(1)个搜索。然后您没有嵌套循环,您有一个循环(将项添加到集合中)和另一个循环(执行搜索)。