主要问题:
好的,这是情况,我们考虑2个字符串数组:
string foo = { "Roses are #FF0000" , "Violets are #0000FF", "Paint it #000000"}
string bar = { "Guns", "Roses", "Violets"}
在条形码中检索包含字符串的foo中的字符串的“最少代码行”方法是什么?
(即,在这种情况下,foo的2个第一元素)
当然我想避免“手动”完成所有逻辑,因为我确信Linq对交叉功能更有效,但我不知道如何使用它来执行这个精确的任务。
TieBreakers:
1 - 如果foo包含多于一个bar元素的字符串
string foo = { "Roses are #FF0000" , "Violets are #0000FF", "Paint it #000000"}
string bar = { "Roses", "Violets", "are"}
我想避免重复?
2 - 如果我有2个“条形”数组,我想检查一个foo数组怎么办? 合并bar1和bar2或首先使用bar1然后使用bar2执行过滤是否更有效?
Thanx并乐于回答: - )
答案 0 :(得分:6)
LINQ效果很好,是的:
var mixed = foo.Where(x => bar.Any(y => x.Contains(y));
请注意,您仍然只会看到foo
的每个元素,如果有的话。
如果您有多个bar
数组,则可以使用:
var mixed = foo.Where(x => bar1.Concat(bar2)
.Any(y => x.Contains(y));
答案 1 :(得分:2)
假设您的描述中的string
是您老师的错字,
var result=foo.Where(w=>bar.Any(iw=>w.Contains(iw)));
我不确定您的意思是什么重复,只会在foo
中显示一次,无论它们出现在bar
中多少次。
对于第二个打破平局,你所要做的就是这样:
var result=foo.Where(w=>bar1.Any(iw=>w.Contains(iw))||bar2.Any(iw=>w.Contains(iw)));
答案 2 :(得分:1)
string[] foo = new string[] { "Roses are #FF0000", "Violets are #0000FF", "Paint it #000000" };
string[] bar = new string[] { "Guns", "Roses", "Violets" };
var matches = from f in foo
where bar.Any(b => f.Contains(b))
select f;
foreach (var m in matches)
Console.WriteLine(m);