【问题标题】:How to check if one Element of an array matches or a part of an element of another array in c#?如何检查一个数组的一个元素是否匹配或在c#中另一个数组的元素的一部分?
【发布时间】:2017-03-06 10:21:04
【问题描述】:

我有一个字符串数组,

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

我还有一个字符串数组,

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

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

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

string[] newarray={"string three"}

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

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

提前致谢。

【问题讨论】:

    标签: c# .net arrays linq


    【解决方案1】:
    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();  
    

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

    【讨论】:

      【解决方案2】:

      你可以这样做:

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

      【讨论】:

        【解决方案3】:

        你可以试试这个:

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

        【讨论】:

          【解决方案4】:
          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】:

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

            【讨论】:

            • 位置对我来说并不重要。
            【解决方案6】:

            试试这个

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

            【讨论】:

              猜你喜欢
              • 2017-02-10
              • 1970-01-01
              • 2021-01-30
              • 1970-01-01
              • 2017-03-03
              • 2010-10-06
              • 1970-01-01
              • 1970-01-01
              • 2021-12-03
              相关资源
              最近更新 更多