gpt4 book ai didi

java - 从对象的属性中找到重叠值的好算法/技术?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:08 27 4
gpt4 key购买 nike

我正在制作时间表应用程序。重要的类是:

Period
id: int
clazz: Clazz
SubjectTeacher
subject: String
teacher: String
clazz: Clazz
AllocablePeriods: List<Period>

这是示例数据,其中 Jane 和 John 在一个类(class)任教,而 Jane 在另一个类(class)任教。

{sub435, Jane-Algebra-Class1, {1,2,3,4,5,6,7,8}}
{sub124, Jane-Calculus-Class2, {9,10,11,12,13,14,15,16}}
{sub875, John-English-Class1, {1,2,3,4,5,6,7}} //he cannot take #8

我的目标是检测每个 SubjectTeacher可能的交换。例如,在上面的例子中,Jane-Algebra-Class1John-English-Class1 有潜在的交换

{1,Jane-Algebra-Class1,John-English-Class1}
{2,Jane-Algebra-Class1,John-English-Class1}
...
{7,Jane-Algebra-Class1,John-English-Class1}

什么是检测所有 SubjectTeacher 的所有可能交换的好算法/技术?

最佳答案

我希望 AllocablePeriods 的数量相对较小。然后你可以做的是遍历所有教师,遍历他们的所有时期,并将每个这样的时期添加到映射中,将时期标识符映射到可以在此期间任教的教师:

Map<Integer, List<String> > periodTeachersMap = new HashMap<Integer, List<String>>();
for (Teacher teacher: teachers) {
for (AllocablePeriod period: teacher.getPeriods()) {
if (periodTeachersMap.get(period.getId()) == null) {
periodTeachersMap.put(period.getId(), new ArrayList<String>());
}
periodTeachersMap.get(period.getId()).add(teacher.getName());
}
}

在这个周期之后,您将在 periodTeachersMap 中拥有每个周期的所有可以在其中任教的教师。如果你想要这些对本身,你可以很容易地从列表中构建它们。希望对您有所帮助。

关于java - 从对象的属性中找到重叠值的好算法/技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172690/

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