سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أحاول تحسين وظيفة تقوم بالبحث الثنائي عن الأوتار في JavaScript.

يتطلب منك البحث الثنائي معرفة ما إذا كان المفتاح == المحور أو < المحور.

ولكن هذا يتطلب مقارنتين للسلسلة في JavaScript ، على عكس في C مثل اللغات التي لديها strcmp() الوظيفة التي تُرجع ثلاث قيم (-1, 0, +1) ل (أقل من ، على قدم المساواة ، أكبر من).

هل هناك مثل هذه الوظيفة الأصلية في JavaScript ، والتي يمكن أن تعيد قيمة ثلاثية بحيث تكون هناك مقارنة واحدة فقط في كل تكرار للبحث الثنائي؟

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

المحلول

يمكنك استعمال ال localeCompare() طريقة.

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b

 1:  string_a > string_b

 */

قراءة متعمقة:

نصائح أخرى

حسنًا ، في JavaScript ، يمكنك التحقق من سلسلتين لقيم نفس الأعداد الصحيحة حتى تتمكن من القيام بذلك:

  • "A" < "B"
  • "A" == "B"
  • "A" > "B"

وبالتالي يمكنك عمل وظيفتك الخاصة التي تتحقق من الأوتار بنفس طريقة strcmp().

لذلك ستكون هذه هي الوظيفة التي تفعل الشيء نفسه:

function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}

تستطيع استخدم عوامل المقارنة لمقارنة السلاسل. أ strcmp يمكن تعريف الوظيفة على هذا النحو:

function strcmp(a, b) {
    if (a.toString() < b.toString()) return -1;
    if (a.toString() > b.toString()) return 1;
    return 0;
}

تعديلفيما يلي وظيفة مقارنة السلسلة التي تستغرق على الأكثر min {length (أ)، الطول(ب)} مقارنات لمعرفة كيف ترتبط سلسلتان ببعضهما البعض:

function strcmp(a, b) {
    a = a.toString(), b = b.toString();
    for (var i=0,n=Math.max(a.length, b.length); i<n && a.charAt(i) === b.charAt(i); ++i);
    if (i === n) return 0;
    return a.charAt(i) > b.charAt(i) ? -1 : 1;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top