Creación de cadenas mediante programación y manejo de operadores booleanos finales o líderes

StackOverflow https://stackoverflow.com/questions/1203675

  •  05-07-2019
  •  | 
  •  

Pregunta

Estoy usando Lucene en una aplicación. Como tal, tengo un formulario que permite a los usuarios crear una consulta seleccionando lo que desean buscar en los menús desplegables. Una vez que un usuario envía, construyo la consulta y se reduce a algo como esto:

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

Ahora el problema con esto es que la declaración comenzará con 'AND'

Ahora generalmente termino con:

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

Los compañeros programadores preferirían hacer:

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

¿Hay alguna otra técnica que a la gente le guste usar para este tipo de cosas en las que no estoy pensando? Prefiero el primero.

¿Fue útil?

Solución

Hay otras dos soluciones que utilizo, dependiendo un poco del idioma. La primera es similar a la segunda, pero solo cambia el " primer campo " comprobar.

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

Pero la solución que suelo usar involucra una lista ordenada. Suponiendo que pueda extender su código de ejemplo de cualquier forma que parezca sensata:

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

Esto también tiene la ventaja de no realizar muchas copias innecesarias de cadenas, ya que usted ensambla la cadena (en algunos idiomas, esto es caro).

Otros consejos

Siempre he usado el primero. Sobre todo porque me parece más limpio.


Otro enfoque:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top