我正在使用OpusScript,它与Javascript非常相似。
我需要通过其中对象的两个属性对Array进行排序。
数组的对象类型是“ScoreEntity”,其属性为Score和Time。我需要在数组的0索引处获得最高分,反之亦然,更快的时间覆盖匹配分数。
我多年来一直试图这样做,我无法理解它,我有星期六综合症!
解答:
我最后使用了BubbleSort,欢迎任何改进这方面的评论。
function SortScoreArray(array)
{
var unsorted = true
while (unsorted)
{
// Tracks whether any changes were made, changed to false on any swap
var complete = true
for (var i = 0; i < array.length - 1; i++)
{
// Holds the value for determining whether to swap the current positions
var swap = false
var currentItem = array[i]
var nextItem = array[i + 1]
if (currentItem.Score == nextItem.Score)
{
// The scores are the same, so sort by the time
if (currentItem.Time > nextItem.Time)
{
swap = true
}
}
else if (currentItem.Score < nextItem.Score)
{
swap = true
}
if (swap)
{
array[i] = nextItem
array[i + 1] = currentItem
complete = false
}
}
if (complete)
{
unsorted = false
}
}
return array
}
答案 0 :(得分:1)
您选择了algorithm吗? (QuickSort很好)
你必须定义一个比较函数来确定哪个ScoreEntity
更少(通过比较得分和时间),然后才实现算法。
(我不知道OpusScript - 也许你可以使用你告诉comparsion谓词的内置排序)