Budování řetězec programatically a vyrovnat se s koncovkami nebo vedoucí logické operátory

hlasů
1

Já používám Lucene v aplikaci. Jako takový mám formu, která umožňuje uživatelům vytvořit dotaz výběrem co chtějí vyhledávat z rozbalovacích. Jakmile uživatel odešle, stavím dotaz a přijde na něco takového:

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

Nyní je problém s tím, že prohlášení začne s ‚A‘

Teď jsem obvykle skončit s:

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

By kolegové programátoři obvykle dávají přednost dělat:

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

Je tu další techniku ​​lidé rádi používají pro takové věci nemám myslel? Dávám přednost první.

Položena 30/07/2009 v 00:40
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Vždycky jsem použil bývalý. Hlavně proto, že to vypadá čistší ke mně.


Jiný přístup:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Odpovězeno 30/07/2009 v 00:49
zdroj uživatelem

hlasů
1

Existují dva další roztoky, které používám, záleží trochu na jazyku. Prvním z nich je podobná vaší druhé, ale jen mění „first-pole“ kontrola.

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 řešení jsem se obvykle používají zahrnuje seřazený seznam. Za předpokladu, že můžu prodloužit svůj příklad kódu jakýmkoli způsobem, který vypadá rozumný:

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

To má také tu výhodu, že ne dělat spoustu zbytečných smyčcových kopií jako vaše sestavit řetězec (v některých jazycích, to je drahý).

Odpovězeno 30/07/2009 v 00:51
zdroj uživatelem

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