Построение строки программен и дело с завершающим или ведущей логическими операторами

голоса
1

Я использую Lucene в приложении. Таким образом у меня есть форма, которая позволяет пользователям создавать запрос, выбрав то, что они хотят, чтобы найти выпадающие. После того, как пользователь отправляет, я построить запрос, и это сводится к тому, что-то вроде этого:

var formedQuery= string.Empty;
foreach(var field in fields)
{
    if (field.name != 'condition so you never know which field from fields will be 1st')
        formedQuery +=  AND + field.name + : field.value;
}

Теперь проблема состоит в том, что заявление будет начинаться с «И»

Теперь я обычно закончить с:

formedQuery = formedQuery.Substring(4) //Trim the first 4 characters

Будет ли товарищи программисты, как правило, предпочитают делать:

var formedQuery= string.Empty;
var i = false;
foreach(var field in fields)
{
    if (false && 
        field.name != 'condition so you never know which field from fields will be 1st')
    {
        formedQuery +=  AND + field.name + : field.value;
        i = true;
    }
    else
        formedQuery +=   + field.name + : field.value;
}

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

Задан 30/07/2009 в 00:40
источник пользователем
На других языках...                            


2 ответов

голоса
0

Я всегда использовал прежний. Главным образом потому, что она выглядит чище меня.


Другой подход:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Ответил 30/07/2009 в 00:49
источник пользователем

голоса
1

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

var formedQuery = string.Empty;
var and = string.Empty;
foreach(var field in fields)
{
    if (field.name != 'condition so you never know which field from fields will be 1st')
    {
        formedQuery += and + field.name + ":" field.value;
        and = " AND";
    }
}

Но решение, которое я обычно использую включает упорядоченный список. Предполагая, что я могу продлить ваш пример кода любым способом, который выглядит разумным:

var formedQuery = list.Empty;
foreach(var field in fields)
{
    if (field.name != 'condition so you never know which field from fields will be 1st')
    {
        formedQuery.push(field.name + ":" field.value);
    }
}
formedQuery = formedQuery.join(" AND ");

Это также имеет преимущество, не делая много ненужных строк копий, как ваш собрать строку (в некоторых языках, это дорого).

Ответил 30/07/2009 в 00:51
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more