Как выбрать один из n объектов случайным образом, не зная сначала n?

Для конкретности, как бы вы читали текстовую строку, выбирали и печатали одну случайную строку, когда вы не знаете заранее количество строк?

Да, это проблема из перламутра программирования, которую я путаю.

Решение выбирает первый элемент, затем выбирает второй с вероятностью 1/2, третий с 1/3 и так далее.

Алгоритм:

i = 0
while more input lines
  with probability 1.0/++i
    choice = this input line
 print choice

Предположим, что окончательный выбор - 3-й элемент, вероятность - 1 x 1/2 x 1/3 x 3/4 x... x n-2/n-1 x n-1/n = = 1/2n? Но 1/n должно быть правильным.

-121--1660567- Как обновить/поднять документ на мангуст? Возможно, пришло время, возможно, это я тону в разреженной документации и не могу обернуть голову вокруг концепции обновления на мангуст:) Вот сделка: у меня есть контактная схема и

Возможно, пришло время, возможно, это я тону в разреженной документации и не могу обернуть голову вокруг концепции обновления в Mongoose:

Вот сделка:

У меня есть контактная схема и модель (укороченные свойства):

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var mongooseTypes = require("mongoose-types"),
    useTimestamps = mongooseTypes.useTimestamps;


var ContactSchema = new Schema({
    phone: {
        type: String,
        index: {
            unique: true,
            dropDups: true
        }
    },
    status: {
        type: String,
        lowercase: true,
        trim: true,
        default: 'on'
    }
});
ContactSchema.plugin(useTimestamps);
var Contact = mongoose.model('Contact', ContactSchema);

Я получаю запрос от клиента, содержащий необходимые поля, и использую свою модель таким образом:

mongoose.connect(connectionString);
var contact = new Contact({
    phone: request.phone,
    status: request.status
});

И теперь мы достигнем проблемы:

  1. Если я позвоню contact.save (функция (err) {...}) Я получу ошибку, если контакт с тем же номером телефона уже существует (как и ожидалось - уникальный)
  2. Я не могу вызвать update () при контакте, так как этот метод не существует в документе
  3. , если я звоню
    Contact.update ({phone: request.phone}, contact, {upsert: true}, function (err {...})
    Я попадаю в бесконечный цикл некоторых типов, поскольку реализация обновления Mongoose явно не хочет, чтобы объект был вторым параметром.
  4. Если я делаю то же, но во втором параметре я передаю ассоциативное множество свойств запроса {статус: request.status, телефон: request.phone...} это работает - но тогда я не имею никакой ссылки на определенный контакт и не могу узнать createdAt и свойства updatedAt .

Итак, в конце концов, я попытался: предоставив документ связаться , как я могу обновить его, если он существует, или добавить его, если он не существует?

Спасибо за ваше время.

333
задан Kaspar Lee 1 May 2019 в 06:42
поделиться