比较两个字符串数组并返回相同的值

时间:2018-08-17 07:17:19

标签: c# arrays

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

示例:

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

预期结果将是

 string[] result = ["A"];

4 个答案:

答案 0 :(得分:6)

undefined is not a function应该在这里提供帮助

Contains()

答案 1 :(得分:5)

您可以使用LINQ的@Override public boolean equals(Object o){...} @Override public int hashCode() {...}

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(); 会产生一个 distinct (唯一)集作为结果。

答案 2 :(得分:0)

您可以按照建议使用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
                }

答案 3 :(得分:0)

一般情况下,当相同项可能出现几次次时,您可以尝试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