Budowanie ciąg programowo i radzenia sobie ze spływu lub wiodących operatorów logicznych

głosy
1

Używam Lucene w aplikacji. Jako takie mam formularz, który pozwala użytkownikom budować zapytania wybierając to, co chcą wyszukiwać z rozwijanego menu. Gdy użytkownik podnosi zbudować kwerendę i sprowadza się do czegoś takiego:

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;
}

Teraz problem polega na tym, że oświadczenie rozpocznie się od „I”

Teraz zazwyczaj skończyć z:

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

Czy inni programiści zazwyczaj wolą zrobić:

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;
}

Czy istnieje inna technika ludzie lubią używać do tego rodzaju rzeczy nie myślę o? Wolę to pierwsze.

Utwórz 30/07/2009 o 00:40
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

I zawsze wykorzystywane były. Głównie dlatego, że wygląda czystsze do mnie.


Innym podejściem:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Odpowiedział 30/07/2009 o 00:49
źródło użytkownik

głosy
1

Istnieją dwa inne rozwiązania używam w zależności trochę na języku. Pierwszym z nich jest podobny do drugiego, ale tylko zmienia „pierwszego pola” czek.

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";
    }
}

Ale rozwiązanie Zwykle używam obejmuje uporządkowaną listę. Zakładając, że mogę przedłużyć swój przykładowy kod w jakikolwiek sposób, który wygląda rozsądne:

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 ");

Ma to również tę zaletę, że nie czyni wiele niepotrzebnych kopii strunowych jak zmontować swój ciąg (w niektórych językach, to jest drogie).

Odpowiedział 30/07/2009 o 00:51
źródło użytkownik

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