Bygge streng auto og arbeider med etterfølgende eller ledende boolske operatører

stemmer
1

Jeg bruker Lucene i et program. Som sådan jeg har en form som lar brukere bygge en spørring ved å velge hva de vil søke fra rullegardinlistene. Når en bruker sender inn, jeg bygge spørringen og det kommer ned til noe sånt som dette:

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

Nå er problemet med dette er at uttalelsen vil begynne med 'AND'

Nå er jeg ferdig som regel med:

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

Vil andre programmerere vanligvis foretrekker å gjøre:

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

Er det en annen teknikk mennesker liker å bruke for denne typen ting jeg ikke tenker på? Jeg foretrekker førstnevnte.

Publisert på 29/07/2009 klokken 23:40
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Jeg har alltid brukt det tidligere. Mest fordi det ser renere for meg.


En annen tilnærming:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Svarte 29/07/2009 kl. 23:49
kilden bruker

stemmer
1

Det er to andre løsninger som jeg bruker, avhengig litt på språket. Den første er lik den andre en, men bare endrer den "første-feltet" sjekk.

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

Men løsningen jeg bruker vanligvis innebærer en sortert liste. Forutsatt at jeg kan utvide eksempelkode på noen måte som ser fornuftig:

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

Dette har også fordelen av å ikke lage masse unødvendige streng kopier som montere strengen (i noen språk, dette er dyrt).

Svarte 29/07/2009 kl. 23:51
kilden bruker

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