Вот простой способ сказать Firestore записать метку времени на стороне сервера в документ:
var ref = db.collection("54201787").doc("time");
ref.set({ timestamp: firebase.firestore.FieldValue.serverTimestamp() });
И вот как вы читаете это значение обратно в ваш клиент:
ref.onSnapshot(function(snapshot) {
var timestamp = snapshot.data().timestamp;
console.log(timestamp.toString());
})
[118 ] В этом последнем фрагменте переменная timestamp
является объектом Date
, поэтому вы также можете получить доступ ко всем другим его методам и свойствам.
Рабочий пример этого кода см. По адресу: https://jsbin.com/burimih/edit?html,js,console
.
Это - quickSelect алгоритм. Это - в основном быстрая сортировка, где Вы только рекурсивно вызываете для одной части массива. Вот простая реализация в Python, записанном для краткости и удобочитаемости, а не эффективности.
def quickSelect(data, nLeast) :
pivot = data[-1]
less = [x for x in data if x <= pivot]
greater = [x for x in data if x > pivot]
less.append(pivot)
if len(less) < nLeast :
return less + quickSelect(greater, nLeast - len(less))
elif len(less) == nLeast :
return less
else :
return quickSelect(less, nLeast)
Это будет работать в O (N) в среднем, с тех пор при каждом повторении, Вы, как ожидают, уменьшите размер data
мультипликативной константой. Результат не будет отсортирован. Худший случай является O (N^2), но с этим имеют дело по существу тем же способом как быстрая сортировка, с помощью вещей как median-3.
Это обычно находится в книгах алгоритма по алгоритмам выбора или "линейному выбору". Вот является определенный раздел по минуте k значениями / макс. k значениями в списке. Это - O (nlog (k)).