Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按对象的类型和顺序进行自定义排序,并返回列表列表_Java_C#_Algorithm_Data Structures - Fatal编程技术网

Java 按对象的类型和顺序进行自定义排序,并返回列表列表

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类型的对象可以放在这里。但如果

这里是我所面临的问题,按类型和给定顺序对一些对象进行排序。 所以,我有几种类型的物体:比如t1,t2,t3,t4,t5,t6,t7。 还有一些插槽:比如slot1、slot2、slot3、slot4、slot5。 我得到了一个以某种特定顺序排列的对象数组

我的目标是返回一个插槽数组,其中包含满足以下条件的对象:

  • 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检索,依此类推。此外,如果有多个相同类型的对象,我们将从输入数组中获取第一个对象
  • 等等
所以,对于上述条件,如果我有5个输入对象:object1、object2、object3、object4、object5和4个插槽:slot1、slot2、slot3、slot4。 在哪里,

  • 对象1-t1
  • 对象2-t3
  • 对象3-t5
  • 对象4-t5
  • 对象5-t6
  • 对象6-t1
产出将是:

  • slot1将包含object1、object6
  • slot2将包含null
  • slot3将包含object2
  • slot4将包含object3
我希望这是清楚的。我知道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

继续您的设计的一些想法:

如果您知道不同类型的对象,请使用枚举来定义它。 处理逻辑可以在一个类中,并使用如下数据结构:

Map<ItemType, List<Slot>> slots = new HashMap<>();
Map slots=newhashmap();
对于您需要存储的每个项目,处理将通过按对象类型获取地图来查找可存储该项目的插槽。
列表
可以以通用方式处理插槽的两个规则: 该列表包含可以存储给定类型对象的插槽。您可以使用
链接列表实现优先级列表插槽
——如果达到插槽容量,请查看列表中的下一个插槽,以此类推。
当插槽列表仅包含一个插槽时,这将处理一个插槽只能处理相同类型对象的情况。

您到底为什么要为其提供阵列?如果你想以不同的数量保存一堆不同的东西,你真的应该考虑创建一个自定义数据类型。不确定自定义数据类型是什么意思。我已经为Object和Slot使用了两个类。这些还不够吗?我不要密码。仅仅是一个关于什么是正确方法的基本想法就会有所帮助。谢谢谢谢你,阿贝!这无疑是一个更干净、更好的方法。我会试试看。