Как обновить документ Firebase / Firestore, не создавая отдельной страницы с формой, которая представляет обновление всего документа?

На мой взгляд, «лучшее» решение - это то, которое можно прочитать другим программистом (или оригинальным программистом два года спустя) без обильных комментариев. Вы можете захотеть самого быстрого или умного решения, которое некоторые из них уже предоставили, но я предпочитаю читаемость по поводу умения в любое время.

unsigned int bitCount (unsigned int value) {
    unsigned int count = 0;
    while (value > 0) {           // until all bits are zero
        if ((value & 1) == 1)     // check lower bit
            count++;
        value >>= 1;              // shift bits, removing lower bit
    }
    return count;
}

Если вы хотите увеличить скорость (и предположив, что вы хорошо документируете, чтобы помочь своим преемникам ), вы можете использовать поиск в таблице:

// Lookup table for fast calculation of bits set in 8-bit unsigned char.

static unsigned char oneBitsInUChar[] = {
//  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F (<- n)
//  =====================================================
    0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, // 0n
    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 1n
    : : :
    4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, // Fn
};

// Function for fast calculation of bits set in 16-bit unsigned short.

unsigned char oneBitsInUShort (unsigned short x) {
    return oneBitsInUChar [x >>    8]
         + oneBitsInUChar [x &  0xff];
}

// Function for fast calculation of bits set in 32-bit unsigned int.

unsigned char oneBitsInUInt (unsigned int x) {
    return oneBitsInUShort (x >>     16)
         + oneBitsInUShort (x &  0xffff);
}

Хотя они полагаются на конкретные типы данных, поэтому они не являются переносимыми. Но, поскольку многие оптимизации производительности в любом случае не переносятся, это может не быть проблемой. Если вы хотите переносимости, я придерживаюсь читаемого решения.

0
задан Frank van Puffelen 31 December 2018 в 07:30
поделиться