以下是按类型和给定顺序对某些对象进行排序的问题。 所以,我有几种类型的对象:比如t1,t2,t3,t4,t5,t6,t7。 和几个插槽:说插槽1,插槽2,插槽3,插槽4,插槽5。 我按特定顺序给出了一系列对象。
我的目标是返回一个充满符合以下条件的对象的插槽数组:
因此,对于上述条件,如果我有5个输入对象:object1,object2,object3,object4,object5和4个slot:slot1,slot2,slot3,slot4。 在哪里,
输出结果为:
我希望这很清楚。我知道Slot1和Slot2很特别。从第3个插槽开始,所有其他插槽都遵循类似的条件。
我正在尝试编写一个函数来返回带有填充对象的插槽数组。同时我想用一个好的设计来组织它 - 就像有一个配置,它有一些方法可以确定哪些类型在哪些插槽中定义以及定义对象的类型。
到目前为止我尝试过:
class MyObject
{
String type;
}
class Slot
{
int capacity;
MyObject[] canContain;
}
class MyProject
{
Slot Slot1 = new Slot { capacity: 100, canContain: {"type1"})
Slot Slot2 = new Slot { capacity: 100, canContain: {"type2"})
Slot Slot3 = new Slot { capacity: 1, canContain: {"type3", "type4"})
Slot Slot4 = new Slot { capacity: 1, canContain: {"type4", "type5"})
void getSlots(MyObject[] objects)
{
// I would end up using multiple for loops here for each slot
// not sure if that is the right approach
// if it is, just let me know and I could proceed
// if not, is there another good way of approaching this
}
}
感谢任何帮助。谢谢!
首选语言:C#或Java。
答案 0 :(得分:0)
继续设计的一些想法:
如果您知道不同类型的对象,请使用枚举来定义它。 处理逻辑可以在一个类中,并使用如下数据结构:
Map<ItemType, List<Slot>> slots = new HashMap<>();
对于您需要存储的每个项目,处理将通过按对象类型获取地图来查找可以存储它的插槽。
List<Slot>
可以通用方式处理插槽的两个规则:
该列表包含可以存储给定类型的对象的槽。您可以使用LinkedList
实现优先级列表槽 - 如果达到了插槽容量,请查看列表中的下一个,等等。
当插槽列表只包含一个插槽时,这将处理插槽只能处理相同类型的对象的情况。