C# Lambda表达式到负两个字符串数组
我正在尝试对两个字符串数组执行SQL减号的等价操作。以下是我试图复制的代码:C# Lambda表达式到负两个字符串数组,c#,lambda,C#,Lambda,我正在尝试对两个字符串数组执行SQL减号的等价操作。以下是我试图复制的代码: string returnValue = ""; foreach (string eachWord in allWords) { foreach (string ignoreWord in ignoreWords) { if (eachWord != ignoreWord)
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)个搜索。然后您没有嵌套循环,您有一个循环(将项添加到集合中)和另一个循环(执行搜索)。