【发布时间】:2016-01-29 19:54:03
【问题描述】:
首先我必须说明我正在使用 Unity 5.3 并且新的 MonoDevelop 不允许我进行调试。 Unity 崩溃了 :(
所以我有一个“目标”列表,我需要根据 3 个标准进行排序:
- 首先应列出“活动”目标
- 然后按难度级别排序
- 最终随机获得相同级别的目标
这是我的代码:
public class Goal {
public int ID;
public int Level;
public bool Active;
}
...
List<Goal> goals;
goals.Sort((a, b) => {
// first chooses the Active ones (if any)
var sort = b.Active.CompareTo(a.Active);
if (sort == 0) {
// then sort by level
sort = (a.Level).CompareTo(b.Level);
// if same level, randomize. Returns -1, 0 or 1
return sort == 0 ? UnityEngine.Random.Range(-1, 2) : sort;
} else {
return sort;
}
});
当我运行此代码时,有时我会在不活跃的目标之后获得一个或多个活跃的目标,但我不明白为什么。
【问题讨论】:
-
你能把行为缩小到一组特定的输入吗?
-
问题可能与排序顺序不唯一有关。也就是说:任何给定的订单可能都是正确的,但由于相同优先级项目的随机化,任何验证此订单的尝试都将返回不同的订单。我会找到一种不同的洗牌方式
-
您能否提供一个重现(或有可能重现)该问题的示例输入?
-
您是否有更改现有目标的 Active 属性的并发代码?如果是,那么我猜测目标的 Active 属性在排序期间甚至之后发生了变化。另外:也许目标是在排序之后添加的。
-
@mcmorry 请让我们知道它是什么 :)