orderList<T> function
void
orderList<
T>( - List<T> collection,
- T item,
- num getCompareValue(
- T
)
)
Implementation
void orderList<T>(List<T> collection, T item, num Function(T) getCompareValue) {
if (collection.isEmpty) {
collection.add(item);
return;
}
final itemValue = getCompareValue(item);
if (getCompareValue(collection.last) > itemValue) {
collection.add(item);
return;
}
if (itemValue >= getCompareValue(collection.first)) {
collection.insert(0, item);
return;
}
Tuple2<int, int> insertRange = Tuple2(0, collection.length - 1);
while (insertRange.item2 - insertRange.item1 > 3) {
final middleIndex = ((insertRange.item1 + insertRange.item2) / 2).floor();
if (getCompareValue(collection[middleIndex]) > itemValue) {
insertRange = insertRange.withItem1(middleIndex);
} else {
insertRange = insertRange.withItem2(middleIndex);
}
}
for (int i = insertRange.item2; i >= insertRange.item1; --i) {
if (getCompareValue(collection[i]) > itemValue) {
collection.insert(i + 1, item);
return;
}
}
collection.insert(insertRange.item1, item);
}