从成对比较创建列表

时间:2015-06-01 21:27:32

标签: c# linq

我对许多物体进行成对比较并估计相似性

Item-1,Item-2,Similarity
11, 16, 0.9
11, 18, 0.5
11, 21, 0.9
12, 19, 0.8
12,22, 0.9
12, 24, 0.3

我希望现在根据阈值创建群集,例如,阈值为0.8,想要创建如下列表:

{11,16, 21}
{12,19,22} 

with threshold > 0.8

有没有办法在LINQ中执行此操作?我找到了几种从列表中生成对的方法,但我需要反过来。

2 个答案:

答案 0 :(得分:2)

假设您拥有包含属性的此类对的集合,Item1Item2Similarity,其中前两个是整数,第二个是双精度。

var threshold = 0.8f;
var sets = pairs.Where(p => p.Similarity > threshold)
                .GroupBy(p => p.Item1, p => p.Item2)
                .Select(g => new [] { g.Key }.Union(g));

答案 1 :(得分:1)

您可以使用

获取请求的群组

items.Where(i => i.Similarity >= .8).GroupBy(i => i.Item1)

然后列表为group.Key + group.Select(i => i.Item2)