الفرق بين المراجعتين ل"Kotlin/collections/binarySearch"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>binarySearch()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة <code>binarySearch()‎</code> قاموسً...')
 
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE: الدالة <code>binarySearch()‎</code> في لغة Kotlin}}</noinclude>
 
<noinclude>{{DISPLAYTITLE: الدالة <code>binarySearch()‎</code> في لغة Kotlin}}</noinclude>
تعيد الدالة <code>binarySearch()‎</code> قاموسًا متغيرا (mutable map) يحتوي ناتج تمرير عناصر المصفوفة أو المجموعة (<code>[[Kotlin/collections|Collection]]</code>) إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة أو المجموعة إلى الدالة <code>keySelector</code>.
+
تبحث الدالة <code>binarySearch()‎</code> عن عنصر في المجموعة أو مجال من المجموعة (<code>[[Kotlin/collections|Collection]]</code>) التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المجموعة مرتبة وفق المُقارِن <code>comparator</code>وإلا فستكون النتيجة غير مُحدّدة.
 +
 
 +
إن احتوت المصفوفة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).
 +
 
 +
تُعيد الدالة فهرس العنصر  المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المصفوفة (أو المجال المحدد من المصفوفة) مرتبة وفقا للمُقارن المحدد <code>comparator.</code>
  
ان كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة<code>keySelector</code> فإن الأخير هو الذي سيُضاف إلى القاموس.
 
 
==البنية العامة==
 
==البنية العامة==
في حال استدعاء الدالة <code>binarySearch()‎</code>عبر مصفوفة فستعيد القاموس المتغير <code>destination</code> مفاتيحه توفرها الدالة <code>keySelector()‎</code> مُطبقةً على عناصر المصفوفة وقيمه هي عناصر المصفوفة:<syntaxhighlight lang="kotlin">
+
<syntaxhighlight lang="kotlin">
inline fun <T, K, M : MutableMap<in K, in T>> Array<out T>.associateByTo(
+
fun <T> Array<out T>.binarySearch(
     destination: M,
+
     element: T,  
    keySelector: (T) -> K
+
     comparator: Comparator<in T>,  
): M
+
     fromIndex: Int = 0,  
inline fun <K, M : MutableMap<in K, in Byte>> ByteArray.associateByTo(
+
     toIndex: Int = size
    destination: M,  
+
): Int
     keySelector: (Byte) -> K
+
</syntaxhighlight>'''<u>بيئة التشغيل: JVM</u>'''
): M
+
 
inline fun <K, M : MutableMap<in K, in Short>> ShortArray.associateByTo(
+
تبحث الدالة <code>binarySearch()‎</code> عن العنصر <code>element</code> في المصفوفة أو مجال من المصفوفة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المصفوفة مرتبة وفق المُقارِن <code>comparator</code>وإلا فستكون النتيجة غير مُحدّدة.
    destination: M,  
+
 
     keySelector: (Short) -> K
+
إن احتوت المصفوفة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).
): M
+
 
inline fun <K, M : MutableMap<in K, in Int>> IntArray.associateByTo(
+
تُعيد الدالة فهرس العنصر  المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المصفوفة (أو المجال المحدد من المصفوفة) مرتبة وفقا للمُقارن المحدد <code>comparator.</code><syntaxhighlight lang="kotlin">
    destination: M,  
+
fun <T> Array<out T>.binarySearch(
     keySelector: (Int) -> K
+
     element: T,  
): M
+
     fromIndex: Int = 0,  
inline fun <K, M : MutableMap<in K, in Long>> LongArray.associateByTo(
+
     toIndex: Int = size
    destination: M,
+
): Int
    keySelector: (Long) -> K
+
fun ByteArray.binarySearch(
): M
+
     element: Byte,  
inline fun <K, M : MutableMap<in K, in Float>> FloatArray.associateByTo(
+
     fromIndex: Int = 0,  
    destination: M,
+
     toIndex: Int = size
    keySelector: (Float) -> K
+
): Int
): M
+
fun ShortArray.binarySearch(
inline fun <K, M : MutableMap<in K, in Double>> DoubleArray.associateByTo(
+
     element: Short,  
    destination: M,
+
     fromIndex: Int = 0,  
    keySelector: (Double) -> K
+
     toIndex: Int = size
): M
+
): Int
inline fun <K, M : MutableMap<in K, in Boolean>> BooleanArray.associateByTo(
+
fun IntArray.binarySearch(
    destination: M,
+
     element: Int,  
    keySelector: (Boolean) -> K
+
     fromIndex: Int = 0,  
): M
+
     toIndex: Int = size
inline fun <K, M : MutableMap<in K, in Char>> CharArray.associateByTo(
+
): Int
    destination: M,
+
fun LongArray.binarySearch(
    keySelector: (Char) -> K
+
     element: Long,  
): M
+
     fromIndex: Int = 0,  
</syntaxhighlight>في حال استدعاء الدالة <code>associateByTo()‎</code>عبر مصفوفة فستعيدالقاموس المتغير <code>destination</code> مفاتيحه توفرها الدالة <code>keySelector()‎</code> مُطبقةً على عناصر المصفوفة وقيمه توفرها الدالة <code>valueTransform()‎</code> مُطبقةً على عناصر المصفوفة:<syntaxhighlight lang="kotlin">
+
     toIndex: Int = size
inline fun <T, K, V, M : MutableMap<in K, in V>> Array<out T>.associateByTo(
+
): Int
     destination: M,  
+
fun FloatArray.binarySearch(
     keySelector: (T) -> K,  
+
     element: Float,  
     valueTransform: (T) -> V
+
     fromIndex: Int = 0,  
): M
+
     toIndex: Int = size
inline fun <K, V, M : MutableMap<in K, in V>> ByteArray.associateByTo(
+
): Int
     destination: M,  
+
fun DoubleArray.binarySearch(
     keySelector: (Byte) -> K,  
+
     element: Double,  
     valueTransform: (Byte) -> V
+
     fromIndex: Int = 0,  
): M
+
     toIndex: Int = size
inline fun <K, V, M : MutableMap<in K, in V>> ShortArray.associateByTo(
+
): Int
     destination: M,  
+
fun CharArray.binarySearch(
     keySelector: (Short) -> K,  
+
     element: Char,  
     valueTransform: (Short) -> V
+
     fromIndex: Int = 0,  
): M
+
     toIndex: Int = size
inline fun <K, V, M : MutableMap<in K, in V>> IntArray.associateByTo(
+
): Int
     destination: M,  
+
</syntaxhighlight>'''<u>بيئة التشغيل: JVM</u>'''
     keySelector: (Int) -> K,  
+
 
     valueTransform: (Int) -> V
+
تبحث الدالة <code>binarySearch()‎</code> عن العنصر <code>element</code> في المصفوفة أو مجال من المصفوفة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المصفوفة مرتبة وفق المُقارِن <code>comparator</code>وإلا فستكون النتيجة غير مُحدّدة.
): M
+
 
inline fun <K, V, M : MutableMap<in K, in V>> LongArray.associateByTo(
+
إن احتوت المصفوفة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).
     destination: M,  
+
 
     keySelector: (Long) -> K,  
+
تُعيد الدالة فهرس العنصر  المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المصفوفة (أو المجال المحدد من المصفوفة) مرتبة وفقا للمُقارن المحدد <code>comparator:</code><syntaxhighlight lang="kotlin">
     valueTransform: (Long) -> V
+
fun <T : Comparable<T>> List<T?>.binarySearch(
): M
+
     element: T?,
inline fun <K, V, M : MutableMap<in K, in V>> FloatArray.associateByTo(
+
    fromIndex: Int = 0,  
     destination: M,  
+
     toIndex: Int = size
     keySelector: (Float) -> K,  
+
): Int
     valueTransform: (Float) -> V
+
</syntaxhighlight>تبحث الدالة <code>binarySearch()‎</code> عن العنصر <code>element</code> في المجموعة (<code>[[Kotlin/collections|Collection]]</code>) أو مجال من المجموعة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المجموعة مرتبة <u>ترتيبا تصاعديا</u> وفق المُقارِن <code>comparator</code>وإلا فستكون النتيجة غير مُحدّدة.
): M
+
 
inline fun <K, V, M : MutableMap<in K, in V>> DoubleArray.associateByTo(
+
إن احتوت المجموعة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).
     destination: M,  
+
 
     keySelector: (Double) -> K,  
+
تُعد القيمة المعدومة <code>null</code> أصغر  من أي عنصر آخر غير معدوم.
     valueTransform: (Double) -> V
+
 
): M
+
تُعيد الدالة فهرس العنصر  المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المجموعة (أو المجال المحدد من المجموعة) مرتبة وفقا للمُقارن المحدد <code>comparator.</code><syntaxhighlight lang="kotlin">
inline fun <K, V, M : MutableMap<in K, in V>> BooleanArray.associateByTo(
+
fun <T> List<T>.binarySearch(
     destination: M,  
+
    element: T,  
     keySelector: (Boolean) -> K,  
+
    comparator: Comparator<in T>,  
     valueTransform: (Boolean) -> V
+
    fromIndex: Int = 0,  
): M
+
    toIndex: Int = size
inline fun <K, V, M : MutableMap<in K, in V>> CharArray.associateByTo(
+
): Int
    destination: M,
+
</syntaxhighlight>'''<u>بيئة التشغيل: JVM</u>'''<syntaxhighlight lang="kotlin">
    keySelector: (Char) -> K,
+
fun <T> List<T>.binarySearch(
    valueTransform: (Char) -> V
+
     element: T,  
): M
+
     comparator: Comparator<in T>,  
</syntaxhighlight>في حال استدعاء الدالة <code>associateByTo()‎</code>عبر مجموعة (<code>[[Kotlin/collections|Collection]]</code>)  فستعيد القاموس المتغير <code>destination</code> مفاتيحه توفرها الدالة <code>keySelector()‎</code> مُطبقةً على عناصر المجموعة وقيمها هي عناصر المجموعة:<syntaxhighlight lang="kotlin">
+
     fromIndex: Int = 0,
inline fun <T, K, M : MutableMap<in K, in T>> Iterable<T>.associateByTo(
+
    toIndex: Int = size
     destination: M,  
+
): Int
     keySelector: (T) -> K
+
</syntaxhighlight>'''<u>بيئة التشغيل: JS</u>'''
):
+
 
</syntaxhighlight>في حال استدعاء الدالة <code>associateByTo()‎</code>عبر مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد القاموس المتغير <code>destination</code> مفاتيحه توفرها الدالة <code>keySelector()</code> مُطبقةً على عناصر المجموعة وقيمه توفرها الدالة <code>valueTransform()‎</code> مُطبقةً على عناصر المجموعة:<syntaxhighlight lang="kotlin">
+
تبحث الدالة <code>binarySearch()‎</code> عن العنصر <code>element</code> في المجموعة (<code>[[Kotlin/collections|Collection]]</code>) أو مجال من المجموعة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المجموعة مرتبة <u>ترتيبا تصاعديا</u> وفق المُقارِن <code>comparator</code>وإلا فستكون النتيجة غير مُحدّدة.
inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateByTo(
+
 
     destination: M,  
+
إن احتوت المجموعة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).
     keySelector: (T) -> K,  
+
 
     valueTransform: (T) -> V
+
تُعد القيمة المعدومة <code>null</code> أصغر  من أي عنصر آخر غير معدوم.
): M
+
 
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
+
تُعيد الدالة فهرس العنصر  المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المجموعة (أو المجال المحدد من المجموعة) مرتبة وفقا للمُقارن المحدد <code>comparator.</code>
  
 
==القيم المعادة==
 
==القيم المعادة==
قاموس. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
+
فهرس العنصر المبحوث عنه أو سالب نقطة الإدراج (‎-insertion point - 1‎). (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
 
==أمثلة==
 
==أمثلة==
===استخدام الدالة <code>()binarySearch</code> مع اللوائح بتمرير دالة واحدة===
+
===استخدام الدالة <code>()binarySearch</code> للبحث عن عنصر في لائحة===
تعرف الشيفرة الآتية لائحة باسم <code>list</code> مكونة من أربعة أعداد باستخدام الدالة <code>()listOf</code>، ثم تنشئ قاموسًا متغيرًا باسم <code>map</code> بتمرير الدالة <code>()func</code> (التي تضرب الأعداد في 4) إلى<code>()associateByTo</code>  ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
+
تعرف الشيفرة الآتية لائحة باسم <code>list</code> مكونة من خمسة حروف <code>()listOf</code>، ثم تبحث في اللائحة عن الحرف <code>'d'</code> باستخدام الدالة <code>()binarySearch</code>  وتطبع الناتج:<syntaxhighlight lang="kotlin">
 
fun main(args: Array<String>) {
 
fun main(args: Array<String>) {
    val list = listOf(1,2,3,4)
+
val list = listOf('a', 'b', 'c', 'd', 'e')
    val map = mutableMapOf<Int, Int>()
 
    val func: (Int) -> Int = {it*4}
 
 
 
    list.associateByTo(map,func)
 
  
    println(map) // {4=1, 8=2, 12=3, 16=4}
+
println(list.binarySearch('d')) // 3
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
===استخدام الدالة <code>()binarySearch</code> مع اللوائح بتمرير دالتين===
+
===استخدام الدالة <code>()binarySearch</code> للبحث عن عنصر في مجال من لائحة===
تعرف الشيفرة الآتية لائحة باسم <code>list</code> مكونة من ثلاثة أحرف باستخدام الدالة <code>()listOf</code>، ثم تنشئ قاموسًا متغيرًا باسم <code>map</code> بتمرير الدالة <code>()</code><code>func</code> (التي تضرب الأعداد في 4) والدالة<code>()func2</code> (التي تضيف 4  إلى العدد الممرر إليها) إلى<code>()associateByTo</code>  ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
+
تعرف الشيفرة الآتية لائحة باسم <code>list</code> مكونة من خمسة حروف <code>()listOf</code>، ثم تبحث في المجال المحدد من الفهرس <code>1</code> (<code>fromIndex = 1</code>) إلى الفهرس <code>3</code> (<code>toIndex = 3</code>) عن الحرف <code>'d'</code> باستخدام الدالة <code>()binarySearch</code>  وتطبع الناتج:<syntaxhighlight lang="kotlin">
 
fun main(args: Array<String>) {
 
fun main(args: Array<String>) {
    val list = listOf(1,2,3,4)
+
val list = listOf('a', 'b', 'c', 'd', 'e')
    val map = mutableMapOf<Int, Int>()
 
    val func: (Int) -> Int = {it*4}
 
    val func2: (Int) -> Int = {it + 4}
 
 
 
    list.associateByTo(map,func,func2)
 
  
    println(map) // {4=5, 8=6, 12=7, 16=8}
+
println(list.binarySearch('d',fromIndex = 1 ,toIndex = 3)) // -4
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==انظر أيضًا==
 
==انظر أيضًا==
*<code>[[Kotlin/collections/associateBy|associateBy()]]</code>‎: تعيد قاموسًا (map).  
+
*<code>[[Kotlin/collections/contains|contains()]]</code>‎: تعيد القيمة true إن كان العنصر المبحوث عنه موجودا في المصفوفة أو المجموعة التي استُدعيت عبرها.  
*<code>[[Kotlin/collections/associate|associate()]]</code>‎: تعيد قاموسًا (map).
+
*صفحة المجموعة (<code>[[Kotlin/collections|Collection]]</code>).  
*<code>[[Kotlin/collections/asList|asList()]]</code>‎: تعيد لائحة والتي تُغلّف المصفوفة الاصلية.
 
 
 
* <code>[[Kotlin/collections/asIterable|asIterable()]]</code>‎: تُنشئ نسخة تكرارية (Iterable instance) والتي تُغلّف المصفوفة الاصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثل<code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>).
 
  
 
==مصادر==
 
==مصادر==
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/associate-by-to.html الدالة  associateByTo()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
+
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/binary-search.html الدالة  binarySearch()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin Functions]]
 
[[تصنيف:Kotlin Functions]]

مراجعة 19:31، 11 مايو 2018

تبحث الدالة binarySearch()‎ عن عنصر في المجموعة أو مجال من المجموعة (Collection) التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المجموعة مرتبة وفق المُقارِن comparatorوإلا فستكون النتيجة غير مُحدّدة.

إن احتوت المصفوفة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).

تُعيد الدالة فهرس العنصر المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المصفوفة (أو المجال المحدد من المصفوفة) مرتبة وفقا للمُقارن المحدد comparator.

البنية العامة

fun <T> Array<out T>.binarySearch(
    element: T, 
    comparator: Comparator<in T>, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int

بيئة التشغيل: JVM

تبحث الدالة binarySearch()‎ عن العنصر element في المصفوفة أو مجال من المصفوفة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المصفوفة مرتبة وفق المُقارِن comparatorوإلا فستكون النتيجة غير مُحدّدة.

إن احتوت المصفوفة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).

تُعيد الدالة فهرس العنصر المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المصفوفة (أو المجال المحدد من المصفوفة) مرتبة وفقا للمُقارن المحدد comparator.

fun <T> Array<out T>.binarySearch(
    element: T, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun ByteArray.binarySearch(
    element: Byte, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun ShortArray.binarySearch(
    element: Short, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun IntArray.binarySearch(
    element: Int, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun LongArray.binarySearch(
    element: Long, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun FloatArray.binarySearch(
    element: Float, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun DoubleArray.binarySearch(
    element: Double, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int
fun CharArray.binarySearch(
    element: Char, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int

بيئة التشغيل: JVM

تبحث الدالة binarySearch()‎ عن العنصر element في المصفوفة أو مجال من المصفوفة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المصفوفة مرتبة وفق المُقارِن comparatorوإلا فستكون النتيجة غير مُحدّدة.

إن احتوت المصفوفة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).

تُعيد الدالة فهرس العنصر المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المصفوفة (أو المجال المحدد من المصفوفة) مرتبة وفقا للمُقارن المحدد comparator:

fun <T : Comparable<T>> List<T?>.binarySearch(
    element: T?, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int

تبحث الدالة binarySearch()‎ عن العنصر element في المجموعة (Collection) أو مجال من المجموعة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المجموعة مرتبة ترتيبا تصاعديا وفق المُقارِن comparatorوإلا فستكون النتيجة غير مُحدّدة.

إن احتوت المجموعة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).

تُعد القيمة المعدومة null أصغر من أي عنصر آخر غير معدوم.

تُعيد الدالة فهرس العنصر المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المجموعة (أو المجال المحدد من المجموعة) مرتبة وفقا للمُقارن المحدد comparator.

fun <T> List<T>.binarySearch(
    element: T, 
    comparator: Comparator<in T>, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int

بيئة التشغيل: JVM

fun <T> List<T>.binarySearch(
    element: T, 
    comparator: Comparator<in T>, 
    fromIndex: Int = 0, 
    toIndex: Int = size
): Int

بيئة التشغيل: JS

تبحث الدالة binarySearch()‎ عن العنصر element في المجموعة (Collection) أو مجال من المجموعة التي استُدعيت عبرها باستخدام خوارزمية البحث الثنائي (binary search algorithm)، يُفترض أن تكون المجموعة مرتبة ترتيبا تصاعديا وفق المُقارِن comparatorوإلا فستكون النتيجة غير مُحدّدة.

إن احتوت المجموعة على عناصر متساوية فلا يمكن التوقع أيها سيُعاد فهرسُه (index).

تُعد القيمة المعدومة null أصغر من أي عنصر آخر غير معدوم.

تُعيد الدالة فهرس العنصر المبحوث عنه إن كان موجودًا في المجال المحدد ؛ خلاف ذلك، فستعيد سالب نقطة الإدراج (‎-insertion point - 1‎). والتي هي الفهرس حيث يجب أن يُدرج العنصر، حتى تبقى المجموعة (أو المجال المحدد من المجموعة) مرتبة وفقا للمُقارن المحدد comparator.

القيم المعادة

فهرس العنصر المبحوث عنه أو سالب نقطة الإدراج (‎-insertion point - 1‎). (انظر شرح الدالة أعلاه لمزيد من التفاصيل)

أمثلة

استخدام الدالة ()binarySearch للبحث عن عنصر في لائحة

تعرف الشيفرة الآتية لائحة باسم list مكونة من خمسة حروف ()listOf، ثم تبحث في اللائحة عن الحرف 'd' باستخدام الدالة ()binarySearch وتطبع الناتج:

fun main(args: Array<String>) {
val list = listOf('a', 'b', 'c', 'd', 'e')

println(list.binarySearch('d')) // 3
}

استخدام الدالة ()binarySearch للبحث عن عنصر في مجال من لائحة

تعرف الشيفرة الآتية لائحة باسم list مكونة من خمسة حروف ()listOf، ثم تبحث في المجال المحدد من الفهرس 1 (fromIndex = 1) إلى الفهرس 3 (toIndex = 3) عن الحرف 'd' باستخدام الدالة ()binarySearch وتطبع الناتج:

fun main(args: Array<String>) {
val list = listOf('a', 'b', 'c', 'd', 'e')

println(list.binarySearch('d',fromIndex = 1 ,toIndex = 3)) // -4
}

انظر أيضًا

  • contains()‎: تعيد القيمة true إن كان العنصر المبحوث عنه موجودا في المصفوفة أو المجموعة التي استُدعيت عبرها.
  • صفحة المجموعة (Collection).

مصادر