Costruire stringa di programatically e si occupano di finale o leader operatori booleani

voti
1

Sto usando Lucene in un'applicazione. Come tale ho un modulo che consente agli utenti di creare una query selezionando ciò che vogliono ricercare menù a discesa. Una volta che un utente invia, costruisco la query e si tratta di qualcosa di simile a questo:

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

Ora il problema è che l'istruzione inizierà con 'E'

Ora io di solito finisco con:

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

Sarebbero colleghi programmatori di solito preferiscono fare:

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

Esiste un'altra tecnica alla gente piace utilizzare per questo genere di cose non sto pensando di? Io preferisco la prima.

È pubblicato 30/07/2009 alle 00:40
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Ho sempre usato il primo. Per lo più perché sembra più pulito per me.


Un altro approccio:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Risposto il 30/07/2009 a 00:49
fonte dall'utente

voti
1

Ci sono altre due soluzioni che uso, a seconda un po 'la lingua. Il primo è simile al vostro secondo, ma appena cambia il controllo "prima-campo".

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

Ma la soluzione Io di solito uso comporta una lista ordinata. Supponendo che posso estendere il codice di esempio in alcun modo che sembra sensato:

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

Questo ha anche il vantaggio di non fare un sacco di copie di stringhe inutili come assemblare la stringa (in alcune lingue, questo è costoso).

Risposto il 30/07/2009 a 00:51
fonte dall'utente

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