بناء سلسلة برمجيا والتعامل مع زائدة أو تؤدي العوامل المنطقية

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأستخدمه لوسين في تطبيق. على هذا النحو لدي بالشكل الذي يتيح للمستخدمين بناء الاستعلام عن طريق تحديد ما تريد البحث من القوائم المنسدلة. مرة واحدة يقدم للمستخدم، وبناء الاستعلام ويتعلق الامر لشيء من هذا القبيل:

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

هل هناك أسلوب آخر من الناس ترغب في استخدامه لهذا النوع من الشيء وأنا لا أفكر في؟ أنا أفضل من السابق.

هل كانت مفيدة؟

المحلول

وهناك نوعان من الحلول الأخرى يمكنني استخدام، وهذا يتوقف قليلا على اللغة. الأول هو مماثلة لثانية واحدة، ولكن فقط يغير "الحقل الأول" الاختيار.

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