Java 按对象的类型和顺序进行自定义排序,并返回列表列表
这里是我所面临的问题,按类型和给定顺序对一些对象进行排序。 所以,我有几种类型的物体:比如t1,t2,t3,t4,t5,t6,t7。 还有一些插槽:比如slot1、slot2、slot3、slot4、slot5。 我得到了一个以某种特定顺序排列的对象数组 我的目标是返回一个插槽数组,其中包含满足以下条件的对象:Java 按对象的类型和顺序进行自定义排序,并返回列表列表,java,c#,algorithm,data-structures,Java,C#,Algorithm,Data Structures,这里是我所面临的问题,按类型和给定顺序对一些对象进行排序。 所以,我有几种类型的物体:比如t1,t2,t3,t4,t5,t6,t7。 还有一些插槽:比如slot1、slot2、slot3、slot4、slot5。 我得到了一个以某种特定顺序排列的对象数组 我的目标是返回一个插槽数组,其中包含满足以下条件的对象: slot1:可以容纳多个对象。只有t1类型的对象才能进入此处 slot2:可以容纳多个对象。只有t2类型的对象才能进入此处 插槽3:只能容纳1个对象。t3类型的对象可以放在这里。但如果
- slot1:可以容纳多个对象。只有t1类型的对象才能进入此处
- slot2:可以容纳多个对象。只有t2类型的对象才能进入此处
- 插槽3:只能容纳1个对象。t3类型的对象可以放在这里。但如果没有t3对象,我们将检索t4类型的对象。如果没有t4类型的对象,我们从t5中检索,依此类推。此外,如果有多个相同类型的对象,我们将从输入数组中获取第一个对象
- slot4:只能容纳1个对象。t4类型的对象可以放在这里。但如果没有t4对象,我们将检索t5类型的对象。如果没有类型为t5的对象,则从t6检索,依此类推。此外,如果有多个相同类型的对象,我们将从输入数组中获取第一个对象
- slot5:只能容纳1个对象。t5类型的对象可以放在这里。但如果没有t5对象,我们将检索t6类型的对象。如果没有t6类型的对象,则从t7检索,依此类推。此外,如果有多个相同类型的对象,我们将从输入数组中获取第一个对象
- 等等
- 对象1-t1
- 对象2-t3
- 对象3-t5
- 对象4-t5
- 对象5-t6
- 对象6-t1
- slot1将包含object1、object6
- slot2将包含null
- slot3将包含object2
- slot4将包含object3
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 继续您的设计的一些想法: 如果您知道不同类型的对象,请使用枚举来定义它。 处理逻辑可以在一个类中,并使用如下数据结构:
Map<ItemType, List<Slot>> slots = new HashMap<>();
Map slots=newhashmap();
对于您需要存储的每个项目,处理将通过按对象类型获取地图来查找可存储该项目的插槽。
列表
可以以通用方式处理插槽的两个规则:
该列表包含可以存储给定类型对象的插槽。您可以使用链接列表实现优先级列表插槽
——如果达到插槽容量,请查看列表中的下一个插槽,以此类推。
当插槽列表仅包含一个插槽时,这将处理一个插槽只能处理相同类型对象的情况。您到底为什么要为其提供阵列?如果你想以不同的数量保存一堆不同的东西,你真的应该考虑创建一个自定义数据类型。不确定自定义数据类型是什么意思。我已经为Object和Slot使用了两个类。这些还不够吗?我不要密码。仅仅是一个关于什么是正确方法的基本想法就会有所帮助。谢谢谢谢你,阿贝!这无疑是一个更干净、更好的方法。我会试试看。