以Jzombie模型为例,如果我想查询能量等于5的所有人类,并将其放入一个列表中,我将使用以下代码:
List<Human> human_list = ArrayList<Human>();
Query<Object> query = new PropertyEquals<Object>(context, "energy", 5);
for (Object o : query.query()) {
Human h = (Human)o;
human_list.add(h);
}
然而,人在人_列表中的顺序是随机的,并且在不同的模拟运行中是不同的。这会导致结果不一致的问题,如下所示:
run-1:
[human_2, human_4, human_3, human_5, human_1]
run-2:
[human_1, human_3, human_4, human_2, human_1]
run-3:
[human_5, human_1, human_3, human_5, human_2]
实际上,我想用engergy==5查询人类,并按id对其进行排序,如下所示:
[human_1, human_2, human_3, human_4, human_5]
所以当我采取进一步的行动时,我总能得到一致的结果。
不保证来自查询的对象顺序,但是假设模型在其他方面是完全确定的,对象将始终是相同的。因此,您将需要使用Collections.sort()对查询结果列表进行排序。对数组进行排序需要可以比较包含的对象以确定排序。对于包含数字或字符串等简单类型的数组,这只是在数组上调用Collections.sort()的问题。由于您想比较代理,因此需要让代理类实现类似:
公共类人工智能
然后提供compareTo()方法的实现,例如以下根据代理的String名称比较代理:
@Override public int compareTo(Human other){返回this.name.compareTo(other.name);}
只需通过以下方式对人员列表进行排序:
收藏。排序(人名列表)
如果指定Human-1、Human-2等人员代理名称,则可能会看到如下输出:
[Human-18,Human-3,Human-7,Human-86,Human-92]
每次您都会看到相同的顺序。由于在本例中我们正在比较字符串,因此顺序可能与我们预期的方式不同。字符串比较查看破折号后的第一位数字,因此“人类-18”在“人类-3”之前排序,因为“1”
@Override public int compareTo(Human other){返回this.id-other.id;}
这将打印人类秩序如下:
[Human-3,Human-7,Human-18,Human-86,Human-92]
我想实现这样的逻辑: 可以看出,查询需要在while循环中重复调用和更新,第二个查询由3个条件组成(这对于AndQuery()方法来说并不容易)。 这在Netlogo中很容易实现。在就餐中,最合适、最短的方式是什么? 更新-初始尝试 有三个问题需要解决: 1) 对特定代理集的查询必须考虑三个条件;AndQuery只包含两个条件。是否存在允许同时考虑两个以上条件的查询方法? 当前问题: 两个条件的初
我需要从表中选择所有的vip并按兰德排序,然后添加按日期排序的其他数据。在第一个子查询中,一切正常,但在第二个子查询中,spa_date DESC不起作用。我知道UNION子查询中的ORDER BY子句会被忽略而没有限制(但ORDER BY rand()起作用),但我需要所有查询(1+2)中的限制,而不是子查询中的限制 问题: 我需要选择spa_vip=1的所有spa_id并按RAND()排序,然
有人知道为什么repository方法没有按照预期工作吗?多谢了。
我正在尝试从大到小的数字对我的记录进行排序,下面是我的示例记录: ...但是现在查询结果是这样的: 那么,对于我想要的东西,正确的查询是什么?
问题内容: 假设我有两个类CLassA和CLassB。它们有一个共同的属性,例如每个类拥有的元素数量。 我如何从ClassA和CLassB的对象创建一个集合,并按该属性排序(降序升序无所谓)? 我收集了一个类型,但是当我尝试实现Comparable Interface时,我无法使用该方法(例如,获取返回元素nr的get)。 我有什么解决方案? 谢谢你的帮助! 问题答案: 实际上,如果要将它们放在同