如何在c#中检查数组的一个元素是否匹配或另一个数组的元素的一部分?

时间:2017-03-06 10:21:05

标签: c# .net arrays linq

我有一个字符串数组,

string[] numbers= {"one","two","last"}

我有另一个字符串数组

string[] variables={"string one","int two","string three"}

如何获取具有variables数组元素的numbers数组元素。

因此,我必须得到"string one","int two"元素。 我必须从variables数组中删除这些元素,并将其余元素存储在新数组中。所以我的新数组应该是,

string[] newarray={"string three"}

我使用了以下代码。但无法得到确切的结果。

foreach (string variable in variables)
{
if(!variable .Contains(numbers.Any())
     {
       newarray.add(param);
     }
 }

先谢谢。

6 个答案:

答案 0 :(得分:2)

string[] numbers= {"one","two","last"};
string[] variables={"string one","int two","string three"};
string [] variablesWithNumbers = variables.Where(t=>numbers
    .Any(u=>t.Contains(u))).ToArray();
string[] newarray = variables.Where(t=>!numbers
    .Any(u=>t.Contains(u))).ToArray();  

这是带有print的csharpad中的代码 http://csharppad.com/gist/989bbe7e439990bc1f993f46d3e64fe8

答案 1 :(得分:1)

你可以这样做:

var result = variables.Where(v=>v.Split(' ').Any(s=>numbers.Contains(s)));

答案 2 :(得分:1)

你可以尝试这个:

var newarray = variables.Where(v => !numbers.Any(n => v.IndexOf(n) >= 0).ToArray()

答案 3 :(得分:1)

Linq为您提供了很多方法...您可以遵循的另一条路径:

var itemsToDiscard = variables.Zip(numbers, (f, s) => !f.Contains(s)).ToArray();
var newArray = variables.Where((_, i) => itemsToDiscard[i]).ToArray();

请注意,您的问题未得到详细说明。位置有意义吗?以下是否应该找到任何匹配?

{"zero", "one", "two"}
{"string one","int two","string three"}

我提出的解决方案并非如此,但如果您希望解决这个问题,那么它还远未明确。如果顺序不重要,则等效代码为:

var itemsToDiscard = numbers.Select(n => variables.All(s => !s.Contains(n))).ToArray();
var resultWithoutPosition = variables.Where((_, i) => itemsToDiscard[i]).ToArray();

答案 4 :(得分:1)

string[] numbers = { "one", "two", "last" };
string[] variables = { "string one", "int two", "string three" };
string[] newarray = variables.Where(v => !numbers.Any(n => v.Contains(n))).ToArray();
variables = variables.Where(v => numbers.Any(n => v.Contains(n))).ToArray();

答案 5 :(得分:0)

试试这个

var result = variables.Except(variables.Intersect(numbers, new ContainsComparer())).ToArray();

有了这个

private class ContainsComparer : IEqualityComparer<string> {
  public bool Equals(string x, string y) => y.Contains(x);
  public int GetHashCode(string obj) => 0;
}