// 用泛型委托实现对象的自定义比较。
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%
*/
知乎: @张赐荣
赐荣博客: www.prc.cx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!