Construirea șir programatic și care se ocupă cu punct sau de conducere operatori boolean

voturi
1

Sunt folosind Lucene într-o aplicație. Ca atare, am un formular care permite utilizatorilor să construiască o interogare prin selectarea ceea ce doresc să căutați din dropdowns. Odată ce un utilizator susține, am construi interogarea și se ajunge la ceva de genul:

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

Acum, problema cu acest lucru este că declarația va începe cu „și“

Acum, de obicei, am terminat cu:

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

Ar obicei colegii programatori preferă să facă:

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

Există o altă tehnică oamenilor le place să folosească pentru acest tip de lucru nu mă gândesc? Prefer prima.

Întrebat 30/07/2009 la 00:40
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Eu am folosit întotdeauna prima. Cea mai mare parte pentru că se pare mai curat pentru mine.


O altă abordare:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Publicat 30/07/2009 la 00:49
sursa de către utilizator

voturi
1

Există alte două soluții pe care le folosesc, în funcție de un pic de limba. Primul este similar cu al doilea, dar pur și simplu schimbă „primul câmp“ verificare.

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

Dar soluția eu folosesc de obicei, implică o listă ordonată. Presupunând că se poate extinde codul de exemplu, în orice mod care arata sensibil:

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

Aceasta are, de asemenea, avantajul de a nu face o mulțime de copii șir inutile ca dumneavoastră asambla șirul (în unele limbi, acest lucru este scump).

Publicat 30/07/2009 la 00:51
sursa de către utilizator

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