Η οικοδόμηση κορδόνι κάποιου προγράμματος και την αντιμετώπιση σύροντας ή οδηγούν boolean φορείς

ψήφοι
1

Είμαι με τη χρήση Lucene σε μια εφαρμογή. Ως εκ τούτου έχω μια φόρμα που επιτρέπει στους χρήστες να οικοδομήσουμε ένα ερώτημα επιλέγοντας αυτό που θέλετε να αναζητήσετε από αναπτυσσόμενα μενού. Μόλις ένας χρήστης υποβάλλει, Χτίζω το ερώτημα και έρχεται κάτω σε κάτι σαν αυτό:

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

Τώρα το πρόβλημα με αυτό είναι ότι η δήλωση θα αρχίσει με «ΚΑΙ»

Τώρα που συνήθως τελειώνουν με:

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

Θα τους συναδέλφους προγραμματιστές συνήθως προτιμούν να κάνουν:

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

Είναι μια άλλη τεχνική που οι άνθρωποι ήθελαν να χρησιμοποιήσουν γι 'αυτό το είδος του πράγματος δεν σκέφτομαι εκεί; Προτιμώ το πρώτο.

Δημοσιεύθηκε 30/07/2009 στις 00:40
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Έχω χρησιμοποιήσει πάντα το πρώτο. Κυρίως επειδή φαίνεται καθαρότερα για μένα.


Μια άλλη προσέγγιση:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
Απαντήθηκε 30/07/2009 στις 00:49
πηγή χρήστη

ψήφοι
1

Υπάρχουν δύο άλλες λύσεις που χρησιμοποιούν, ανάλογα λίγο με τη γλώσσα. Το πρώτο είναι παρόμοιο με το δεύτερο, αλλά απλώς αλλάζει το «πρώτο πεδίο» Έλεγχος.

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

Αλλά η λύση που συνήθως χρησιμοποιούν περιλαμβάνει μια ταξινομημένη λίστα. Υποθέτοντας ότι μπορώ να επεκτείνει παράδειγμα κώδικα σας με οποιοδήποτε τρόπο που φαίνεται λογική:

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

Αυτό έχει επίσης το πλεονέκτημα ότι δεν κάνει πολλά περιττά αντίγραφα εγχόρδων, όπως σας συγκεντρώνουν το string (σε ορισμένες γλώσσες, αυτό είναι ακριβό).

Απαντήθηκε 30/07/2009 στις 00:51
πηγή χρήστη

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