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

本文关键字:数组 字符串 是否 另一个 包含 何检查 检查 | 更新日期: 2023-09-27 17:56:28

主要问题:
好的伙计们,情况是这样的,让我们考虑 2 个字符串数组:

string foo = { "Roses are #FF0000" , "Violets are #0000FF", "Paint it #000000"}
string bar = { "Guns", "Roses", "Violets"}

foo 中包含 bar 字符串的 foo 中检索字符串的"最少代码行"方法是什么?
(即,在这种情况下,foo 的两个前元素)

当然,我想避免"手动"完成所有逻辑,因为我确信 Linq 使用相交功能更有效,但我不知道如何使用它来执行这个精确的任务。

决胜局 :
1 -如果 foo 包含包含多个柱线元素的字符串怎么办,

string foo = { "Roses are #FF0000" , "Violets are #0000FF", "Paint it #000000"}
string bar = { "Roses", "Violets", "are"}

我想避免重复?

2 - 如果我有 2 个"条形"数组,我想检查一个 foo 数组怎么办?
合并 bar1 和 bar2 还是先使用 bar1 然后使用 bar2 执行过滤器更有效?


谢谢,回答得开心:-)

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

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

假设描述中的string是老师的错别字,

var result=foo.Where(w=>bar.Any(iw=>w.Contains(iw)));

我不确定你的意思是重复,无论元素在bar中出现多少次,它们只会在foo中显示一次。

至于第二个决胜局,你所要做的就是这样:

var result=foo.Where(w=>bar1.Any(iw=>w.Contains(iw))||bar2.Any(iw=>w.Contains(iw)));
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);