bağlaçlar programlama dize Bina ve sondaki ile uğraşan veya lider

oy
1

Ben bir uygulamada lucene kullanıyorum. Bu nedenle ben, kullanıcıların açılır listelerden aramak istediğiniz şeyi seçerek bir sorgu oluşturmak sağlayan bir form var. Bir kullanıcı gönderdikten sonra, ben sorgu oluşturmak ve böyle bir şeye doğru geri gelir:

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

Şimdi bu sorun deyimi ile başlar 'VE' olmasıdır

Şimdi ben genellikle ile bitirmek:

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

dost programcılar genellikle yapmayı tercih ederim:

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

insanlar düşünüyorum değildir bu tür bir şey için kullanmak ister başka bir teknik var mı? Ben eski tercih ederim.

Oluştur 30/07/2009 saat 00:40
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Hep eski kullandık. Çoğunlukla bana temizleyici görünüyor çünkü.


Başka bir yaklaşım:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Cevap 30/07/2009 saat 00:49
kaynak kullanıcı

oy
1

dile biraz bağlı kullandığım diğer iki çözümler vardır. Önce ikinci birine benzer, ancak sadece "birinci alan" çek değiştirir.

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

Ama genellikle kullanmak çözüm sıralı bir listesini içerir. Ben mantıklı görünüyor herhangi bir şekilde örnek kod uzatabilirsiniz varsayarsak:

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

Bu aynı zamanda gereksiz dize kopya sürü yapmıyor avantajına sahiptir senin dize (bazı dillerde, bu pahalı) birleştirin.

Cevap 30/07/2009 saat 00:51
kaynak kullanıcı

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