如何检查数组中的字符串是否包含来自另一个数组的字符串
本文关键字:数组 字符串 是否 另一个 包含 何检查 检查 | 更新日期: 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);