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

これに伴う問題は、ステートメントが「AND」で始まることです。

今、私は通常次のように終了します:

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

私が考えていないこの種のことのために人々が使用するのが好きな別のテクニックはありますか?私は前者が好きです。

4

2 に答える 2

1

言語に少し依存して、私が使用する他の2つのソリューションがあります。最初のものは2番目のものと似ていますが、「最初のフィールド」チェックを変更するだけです。

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

これには、文字列をアセンブルするときに不要な文字列コピーを大量に作成しないという利点もあります(一部の言語では、これは高価です)。

于 2009-07-29T23:51:33.820 に答える
0

私はいつも前者を使ってきました。主にそれが私にはきれいに見えるからです。


別のアプローチ:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
于 2009-07-29T23:49:52.980 に答える