Der Aufbau String programmatisch und der Umgang mit stechend oder schleppend Booleschen Operatoren

stimmen
1

Ich verwende Lucene in einer Anwendung. Als solche habe ich eine Form, die von der Auswahl der Benutzer bauen eine Abfrage lässt, was sie von Dropdown-Listen suchen möchten. Sobald ein Benutzer einreicht, baue ich die Abfrage und es kommt darauf an, etwas wie folgt aus:

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

Nun ist das Problem dabei ist, dass die Aussage mit beginnen ‚UND‘

Jetzt in der Regel Ich beende mit:

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

Würden Kerl Programmierer in der Regel bevorzugen:

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

Gibt es eine andere Technik, die ich denke bin nicht Leute für diese Art der Sache zu verwenden? Ich ziehe die ersteren.

Veröffentlicht am 30/07/2009 um 00:40
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Ich habe immer die ersteren verwendet. Vor allem, weil es mir sieht sauberer.


Ein anderer Ansatz:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Beantwortet am 30/07/2009 um 00:49
quelle vom benutzer

stimmen
1

Es gibt zwei weitere Lösungen, die ich nutze, ein wenig von der Sprache abhängig. Die erste ist ähnlich wie Ihr zweite, sondern ändert nur das „first-Feld“ Check.

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

Aber die Lösung, die ich in der Regel verwenden, beinhaltet eine geordnete Liste. Angenommen, ich kann Ihr Beispiel-Code in irgendeiner Weise erweitern, die vernünftig aussieht:

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

Dies hat auch den Vorteil, dass nicht viele unnötige String Kopien als montieren die Zeichenfolge zu machen (in einigen Sprachen, das ist teuer).

Beantwortet am 30/07/2009 um 00:51
quelle vom benutzer

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