c# - 如何在 C# 中执行比较函数

标签 c# linq comparison

假设我在一个列表中有元素(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/

相关文章:

C#:通用 T 的默认值?不为空;行为随着通用约束而改变

c# - Newtonsoft JObject.Parse 抛出基本异常...如何处理

c# - DataGridView AddRange,将 IEnumerable<object[]> 转换为 DataGridViewRow[](如果可能,使用 LINQ)

java - { int == nulltype } 与 { Integer == nulltype }

java - 字符串比较和实习

Python - 比较两个不同列表中的子列表

c# - 在 Windows 10 平板电脑模式下为一个应用程序禁用虚拟键盘

c# - List<uint> 在 .NET 4.0 中每个列表项有多大?

c# - Enum.ToString() 在工具提示中不起作用

c# - LINQ 连接、分组和求和(或任何聚合)