假设我在一个列表中有元素(X、Y 和 Z),我有一个函数,它生成一个百分比,表示两个对象彼此相似的程度。
我想做的是使用我的 compareElements 针对 Y 和 Z 运行 X,所以:
compareElements(X,Y); // equals 55
compareElements(X,Z); // equals 60
然后 Y 对 X 和 Z
compareElements(Y,X); // equals 55
compareElements(Y,Z); // equals 62
然后 Z 对 Y 和 X
compareElements(Z,X); // equals 60
compareElements(Z,Y); // equals 62
然后,我返回最大值,即 62。
显然,那里有一些重复,我不需要重复,但我不确定如何消除它。
我如何构造我的 LINQ 查询或函数/算法来对每个元素进行比较而不重复?
如果可以的话,我更愿意使用 LINQ,因为我正在传递一个可枚举的函数,并且该函数在实际枚举列表之前返回,因此我们可以节省执行比较的成本,直到列表被枚举。
我只需要比较函数的最大值 62。
注意:我的实际结果集是处理列表中 3 到 10 个元素的平均值,这些元素需要通过此比较函数运行。
最佳答案
我倾向于这样做:
int count = list.Count;
var query = from index1 in Enumerable.Range(0, count)
from index2 in Enumerable.Range(index1 + 1, count - (index1 + 1))
select ComputeSimilarity(list[index1], list[index2]);
var maxSimilarity = query.Max();
关于c# - 如何在 C# 中执行比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567004/