【问题标题】:Compare two string arrays and return same values比较两个字符串数组并返回相同的值
【发布时间】:2018-08-17 07:17:18
【问题描述】:

我想比较两个 string 数组并只返回两个数组中包含的值。

例子:

 string[] a = ["A", "B", "C", "D"];
 string[] b = ["A", "E", "I", "M", "Q", "U", "Y"];

预期结果是

 string[] result = ["A"];

【问题讨论】:

  • 邮政编码,你尝试了什么,卡在哪里

标签: c# arrays


【解决方案1】:

Contains() 应该在这里提供帮助

string[] a1 = { "A","B", "C", "D" };
string[] a2 = { "A", "E", "I", "M", "Q", "U" ,"Y" };

string[] result = a1.Where(a2.Contains).ToArray();

【讨论】:

    【解决方案2】:

    你可以使用 LINQ 的 Intersect:

    var arrayA = new string[] { "A", "B", "C", "D" };
    var arrayB = new string[] { "A", "E", "M", "Q", "U", "Y" };
    var matchingItems = arrayA.Intersect(arrayB);
    var firstMatchingItem = arrayA.Intersect(arrayB).First();
    

    请注意,Intersect 会生成一个 distinct(唯一)集作为结果。

    【讨论】:

      【解决方案3】:

      您可以按照建议使用 LINQ,也可以像这样使用 2 个 for 循环:

              string[] a1 = { "A", "B", "C", "D" };
              string[] a2 = { "A", "E", "I", "M", "Q", "U", "Y" };
      
              for(int i = 0; i < a1.Length; i++)
                  for(int y = 0; y < a2.Length; y++)
                      if(a1[i]==a2[y])
                      {
                          //Code
                      }
      

      【讨论】:

        【解决方案4】:

        一般情况,当相同项可能出现几次次时,你可以试试GroupBy:

          // Expected anewer: [A, B, A] 
          // since A appears two times in b only, B - just once
          string[] a = new[] { "A", "B", "A", "C", "A", "D" };
          string[] b = new[] { "A", "E", "I", "M", "A", "Q", "U", "B" };
        
          var quantities = b
            .GroupBy(item => item)
            .ToDictionary(chunk => chunk.Key, chunk => chunk.Count());
        
          string[] result = a
            .Where(item => quantities.TryGetValue(item, out var count) && 
                           ((quantities[item] = --count) >= 0))
            .ToArray();
        
          Console.Write(string.Join(", ", result));
        

        结果:

          A, B, A
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多