ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#求两数组相似度

2022-03-31 23:03:38  阅读:142  来源: 互联网

标签:数组 C# System int Length 相似 using arrayB arrayA


// 用泛型委托实现对象的自定义比较。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CRApp
{
	static class Program
	{
		public delegate bool DLCompare<TValue>(TValue ValueA,TValue valueB);

		static int Main(string[] args)
		{
			string[] strA = { "apple", "boy", "cat" };
			string[] strB = { "apple", "bird", "cat" };
			Console.WriteLine("strA与strB的成员相似度为{0}%",CountSimilarity(strA, strB, delegate (string a, string b) { return (a == b); }));
			int[] numA = {1,4,5,7,9};
			int[] numB = {2,4,5,6,9};
			Console.WriteLine("numA与numB的成员相似度为{0}%",CountSimilarity(numA,numB,(_a,_b)=> { return (_a==_b);}));
			return (0);
		}

		public static double CountSimilarity<TArray> (TArray[] arrayA,TArray[] arrayB,DLCompare<TArray> compareDelegate)
		{
			if (arrayA == null || arrayB == null)
			{
				return (-1);
			}
			int[,] dp = new int[Math.Max(arrayA.Length,arrayB.Length)+1,Math.Max(arrayA.Length,arrayB.Length)+1];
			for (int a = 0; a < arrayA.Length; a++)
			{
				for (int b = 0; b < arrayB.Length; b++)
				{
					if (compareDelegate(arrayA[a],arrayB[b]))
					{
						dp[a + 1, b + 1] = dp[a, b] + 1;
					}
					else
					{
						dp[a + 1, b + 1] = Math.Max(dp[a, b + 1], dp[a + 1, b]);
					}
				}
			}
			return (Math.Round(((double)(dp[arrayA.Length, arrayB.Length]) / Math.Max(arrayA.Length, arrayB.Length)) * 100, 2));
		}
	}
}

/*
运行结果:
strA与strB的成员相似度为66.67%
numA与numB的成员相似度为60%
*/

标签:数组,C#,System,int,Length,相似,using,arrayB,arrayA
来源: https://www.cnblogs.com/netlog/p/16084573.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有