gpt4 book ai didi

C# 获取集合中最流行的 2 项组合

转载 作者:行者123 更新时间:2023-12-03 03:11:47 25 4
gpt4 key购买 nike

我有一个项目集合,这里是:

    ID    ELECT1        ELECT2
1 FDI AED
2 BPG AED
3 AED FDI
4 FDI AED
5 GPH AED
6 AED BPG
7 GPH FDI

我想将 elect1 和 elect2 分组,然后输出 2 个最受欢迎的,就像这些项目被选择了 3 次

FDI AED 
AED FDI
FDI AED

然后第二个最受欢迎的组合是

AED BPG
BPG AED

所以输出是

2 Most popular combinations are
FDI AED
AED BPG

我已经编写了一些代码,但我不知道如何才能做到这一点

var groups = cStudent.GroupBy(x => new { x.elective1, x.elective2 });    
foreach (var group in groups)
{
Console.WriteLine("{0} / {1}:", group.Key.elective1, group.Key.elective2);
foreach (var item in group)
{
Console.WriteLine(" {0} ({1})", item.elective1, item.elective2);
}
}

这就是我用代码得到的结果,它已经完成一半了,只是不知道如何完成。 IMAGE

最佳答案

恕我直言,解决此问题的最简洁方法是实现自定义相等比较器,它提供解决当前问题所需的相等语义:

class IgnoreElectiveOrderStudentEqualityComparer 
: IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
=> (x.ElectiveOne == y.ElectiveOne &&
x.ElectiveTwo == y.ElectiveTwo) ||
(x.ElectiveOne == y.ElectiveTwo &&
x.ElectiveTwo == y.ElectiveOne);

public int GetHashCode(Student obj)
=> obj.ElectiveOne.GetHashCode() ^
obj.ElectiveTwo.GetHashCode();
}

现在您只需使用 GroupBy 和自定义比较器即可:

var mostPopular = 
students.GroupBy(s => s,
new IgnoreElectiveOrderStudentEqualityComparer())
.OrderByDescending(g => g.Count())
.Select(g => new
{
g.Key.ElectiveOne,
g.Key.ElectiveTwo
})
.Take(2);

关于C# 获取集合中最流行的 2 项组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com