如何检查数组中的字符串是否包含来自另一个数组的字符串

时间:2011-05-16 11:51:10

标签: c#

主要问题:
好的,这是情况,我们考虑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并乐于回答: - )

3 个答案:

答案 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);