【发布时间】: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"];
【问题讨论】:
-
邮政编码,你尝试了什么,卡在哪里
我想比较两个 string 数组并只返回两个数组中包含的值。
例子:
string[] a = ["A", "B", "C", "D"];
string[] b = ["A", "E", "I", "M", "Q", "U", "Y"];
预期结果是
string[] result = ["A"];
【问题讨论】:
Contains() 应该在这里提供帮助
string[] a1 = { "A","B", "C", "D" };
string[] a2 = { "A", "E", "I", "M", "Q", "U" ,"Y" };
string[] result = a1.Where(a2.Contains).ToArray();
【讨论】:
你可以使用 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(唯一)集作为结果。
【讨论】:
您可以按照建议使用 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
}
【讨论】:
一般情况,当相同项可能出现几次次时,你可以试试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
【讨论】: