プログラムで文字列を構築し、末尾または先頭のブール演算子を処理する

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

  •  05-07-2019
  •  | 
  •  

質問

アプリケーションで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;
}

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

役に立ちましたか?

解決

言語に少し依存しますが、私が使用する他の2つのソリューションがあります。 1つ目は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 ");

これには、文字列を組み立てる際に不要な文字列のコピーを大量に作成しないという利点もあります(一部の言語では、これは高価です)。

他のヒント

前者は常に使用しています。主にそれは私にとってきれいに見えるためです。


別のアプローチ:

query = first_field_name

for every other field besides first:
    query = " AND " + field_name
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top