Есть ли лучший способ сделать этот программный поток

Вы можете использовать индексы, нечувствительные к регистру:

В следующем примере создается коллекция без сортировки по умолчанию, а затем добавляется индекс в поле имени с учетом нечувствительности к регистру. Международные компоненты для Unicode

/* strength: CollationStrength.Secondary
* Secondary level of comparison. Collation performs comparisons up to secondary * differences, such as diacritics. That is, collation performs comparisons of 
* base characters (primary differences) and diacritics (secondary differences). * Differences between base characters takes precedence over secondary 
* differences.
*/
db.users.createIndex( { name: 1 }, collation: { locale: 'tr', strength: 2 } } )

Чтобы использовать индекс, запросы должны указывать одну и ту же сортировку.

db.users.insert( [ { name: "Oğuz" },
                            { name: "oğuz" },
                            { name: "OĞUZ" } ] )

// does not use index, finds one result
db.users.find( { name: "oğuz" } )

// uses the index, finds three results
db.users.find( { name: "oğuz" } ).collation( { locale: 'tr', strength: 2 } )

// does not use the index, finds three results (different strength)
db.users.find( { name: "oğuz" } ).collation( { locale: 'tr', strength: 1 } )

или вы можете создать коллекцию с сравнение по умолчанию:

db.createCollection("users", { collation: { locale: 'tr', strength: 2 } } )
db.users.createIndex( { name : 1 } ) // inherits the default collation

0
задан Chip 18 January 2019 в 13:37
поделиться

2 ответа

void doSomething() {
    function1(data) || function2(data) /* || ... more function calls ... */;
}

Логический или || оператор имеет нужные вам свойства - оценивается слева направо и останавливается, как только один операнд получает true.

0
ответ дан Igor Tandetnik 18 January 2019 в 13:37
поделиться

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

std::vector<std::function<bool(std::string&)> listCheckers;

listCheckers.push_back([](std::string& p_data) -> bool { return function1(p_data); });
listCheckers.push_back([](std::string& p_data) -> bool { return function2(p_data); });
listCheckers.push_back([](std::string& p_data) -> bool { return function3(p_data); });
//...and so on...

//----------------------------- 
std::string theData = "Hello I'm a Data";

//evaluate all data
bool bSuccess = false;
for(fnChecker : listCheckers){
    if(fnChecker(theData)) {
        bSuccess = true;
        break;
    }
}

if(bSuccess ) { cout << "A function has evaluated the data successfully." << endl; }

Вы можете изменять список по своему усмотрению во время выполнения: внешними объектами, настройками конфигурации из файла и т. Д.

0
ответ дан acegs 18 January 2019 в 13:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: