[英]Comparing arrays and returning a similarity figure C#
我试图返回一个数字,代表两个数组之间的相似性。
即:
Array1: {Katy, Jenny, Sarah, Ben, Jill, Tina}
Array2: {Katy, John, Sam, Ben, Jill, Linda}
我想返回数字3,因为三个比较正确。 这可能吗? 我想不出任何可以为我做的功能。
这是您如何计算匹配索引中相等项目的数量。
var c = arr1.Where((x, i) => x.Equals(arr2[i])).Count();
请注意,您可能要确保不要尝试在超出范围的索引中访问arr2:
var c = arr1.Take(arr2.Length).Count(...);
如果您不在乎索引位置,则应使用nemesv的解决方案。
我要解决此问题的方法也是将第一个数组中的值与第二个数组中的每个其他值进行比较。 如果它们匹配,则增加一个比较计数器,这将告诉您它们是三个匹配的比较。
这对我有用:
var array1 = new string[] {"Katy", "Jenny", "Sarah", "Ben", "Jill", "Tina"};
var array2 = new string[] {"Katy", "John", "Sam", "Ben", "Jill", "Linda"};
var similarity = (array1.Length + array2.Length) - array1.Union(array2).Count();
编辑:哦,刚刚看到您希望它们位于相同的位置。
您说的是“根据索引”,假设您的意思是如果“约翰”在第一个列表中的位置1,在第二个列表中的位置2 =>没有匹配。
在这种情况下:
int maxItems = Math.Min(arr1.Length, arr2.Length);
int matchCount = 0;
for(int i = 0; i < maxItems; i++)
{
if(object.Equals(arr1[i], arr2[i]))
matchCount++;
}
我会这样:
int count = array1.Zip(array2, (a, b) => a.Equals(b)).Count(b => b);
zip部分返回IEnumerable<bool>
,而count部分计算该列表中true
发生的次数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.