الفرق بين المراجعتين لصفحة: «Kotlin/kotlin.text/windowed»

من موسوعة حسوب
لا ملخص تعديل
مراجعة وتدقيق.
 
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>text.windowed()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>windowed()‎</code> في Kotlin}}</noinclude>
تعيد الدالة <code>windowed()‎</code> لائحة مكونة  من [[Kotlin/String|سلاسل نصية]] مُقتطفة من [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها (انظر فقرة البنية العامة).   
تعيد الدالة <code>windowed()‎</code> [[Kotlin/collections/List|قائمة]] تحتوي على [[Kotlin/String|سلاسل نصية]] بحجم معين ثابت جلبت من [[Kotlin/CharSequence|سلسلة المحارف]] التي استدعيت معها عند التحرك بخطوات محددة ثابتة، أو تحوي ناتج تطبيق دالة معينة على تلك السلاسل النصية المجلوبة.   
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="kotlin">
<syntaxhighlight lang="kotlin">
inline fun CharSequence.trimEnd(
fun CharSequence.windowed(
     predicate: (Char) -> Boolean
     size: Int,
): CharSequence
    step: Int = 1,
</syntaxhighlight>'''بيئة التشغيل المطلوبة: Kotlin 1.2'''
    partialWindows: Boolean = false
): List<String>
</syntaxhighlight>'''الإصدار المطلوب:''' Kotlin 1.2.


تعيد الدالة <code>windowed()‎</code> لائحة مكونة من [[Kotlin/String|سلاسل نصية]] بطول يساوي <code>size</code> مُقتطفة من [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها، والتي تقتطفها بالتدرج بحيث تقفز في كل مرة <code>step</code> حرفا. [[Kotlin/String|السلاسل النصية]] الأخيرة قد يكون طولها أقل من <code>size</code>.
تعيد الدالة <code>windowed()‎</code> [[Kotlin/collections/List|قائمة]] مكونة من [[Kotlin/String|سلاسل نصية]] حجم كل منها يساوي <code>size</code> جلبت من [[Kotlin/CharSequence/index|سلسلة المحارف]] التي استُدعيت معها في كل مرة تقفز فيها الدالة بخطوة ثابتة مقدارها <code>step</code> من المحارف. [[Kotlin/String|السلسة النصية]] الأخيرة المتبقية قد يكون طولها أقل من <code>size</code>، وتضاف إلى القيم المعادة إن كانت قيمة المعامل <code>partialWindows</code> هي <code>true</code>.<syntaxhighlight lang="kotlin">
 
كلا الوسيطين <code>step</code>  و <code>size</code> ينبغي أن يكونا موجبين، ويمكن أن يكونا أكبر من طول [[Kotlin/CharSequence/index|سلسلة الحروف]] الأصلية.
 
الوسيط <code>partialWindows</code> يحدد ما إذا كانت الدالة ستعيد  [[Kotlin/String|السلاسل النصية]] الجزئية في الأخير، وقيمتها الإفتراضية هي <code>false</code>. <syntaxhighlight lang="kotlin">
fun <R> CharSequence.windowed(
fun <R> CharSequence.windowed(
     size: Int,  
     size: Int,  
سطر 19: سطر 17:
     transform: (CharSequence) -> R
     transform: (CharSequence) -> R
): List<R>
): List<R>
</syntaxhighlight>تعيد  الدالة <code>windowed()‎</code> لائحة مكونة  من نتائج تطبيق الدالة <code>transform</code> على [[Kotlin/String|السلاسل النصية]] المُقتطفة من [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها والتي طولها يساوي <code>size</code> وتقتطفها بالتدرج بحيث تقفز في كل مرة <code>step</code> حرفا. [[Kotlin/String|السلاسل النصية]] الأخيرة قد يكون طولها أقل من <code>size</code>.
</syntaxhighlight>'''الإصدار المطلوب:''' Kotlin 1.2.


لاحظ أنّ سلسلة الحروف المُمرّرة إلى الدالة <code>transform</code> سريعة الزوال (ephemeral)، وهي متاحة فقط داخل الدالة. لذلك لا يجب عليك أن تُخزّنها بأي طريقة، إلا إن أعددت مقتطفًا (snapshot) منها. 
تعيد الدالة <code>windowed()‎</code> [[Kotlin/collections/List|قائمة]] تحتوي على نتائج تطبيق الدالة <code>transform</code> على [[Kotlin/String|سلاسل نصية]] حجم كل منها يساوي <code>size</code> جلبت من [[Kotlin/CharSequence/index|سلسلة المحارف]] التي استُدعيت معها في كل مرة تقفز فيها الدالة بخطوة ثابتة مقدارها <code>step</code> من المحارف. [[Kotlin/String|السلسة النصية]] الأخيرة المتبقية قد يكون طولها أقل من <code>size</code>، وتضاف إلى القيم المعادة إن كانت قيمة المعامل <code>partialWindows</code> هي <code>true</code>.


كلا الوسيطين <code>step</code>  و <code>size</code> ينبغي أن يكونا موجبين، ويمكن أن يكونا أكبر من طول [[Kotlin/CharSequence/index|سلسلة الحروف]] الأصلية.
== المعاملات ==


الوسيط <code>partialWindows</code> يحدد ما إذا كانت الدالة ستعيد  [[Kotlin/String|السلاسل النصية]] الجزئية في الأخير، وقيمتها الإفتراضية هي <code>false</code>.
=== <code>size</code> ===
[[Kotlin/Int|عدد صحيح]] موجب يحدد حجم السلاسل النصية المراد جلبها عند كل خطوة.
 
=== <code>step</code> ===
[[Kotlin/Int|عدد صحيح]] موجب يحدد عدد الخطوات التي يراد أن تجلب عند كل منها سلسلة نصية بحجم <code>size</code>. القيمة الافتراضية هي: 1 (أي التحرك بمقدار محرف واحد).
 
=== <code>partialWindows</code> ===
قيمة منطقية تحدد إن كان يراد جلب السلسلة النصية الأخيرة المتبقية أم لا. القيمة الافتراضية هي: <code>false</code> (أي إهمال الجزء الأخير المتبقي).
 
=== <code>transform</code> ===
دالة تطبق على كل سلسلة نصية جلبت عند كل خطوة وتعيد القيمة المقابلة لها.
 
لاحظ أنّ سلسلة المحارف المُمرّرة إلى الدالة <code>transform</code> سريعة الزوال (ephemeral)، وهي متاحة فقط داخل الدالة. بناءً على ذلك، لا يجب عليك أن تُخزَّن بأي طريقة، إلا إن أعددت مقتطفًا (snapshot) منها.


==القيم المعادة==
==القيم المعادة==
لائحة مكونة  من [[Kotlin/String|سلاسل نصية]].  
تعاد قائمة تحتوي على [[Kotlin/String|سلاسل نصية]] حجم كل منها <code>size</code> جلبت من سلسلة المحارف المعطاة عند التحرك بخطوات ثابتة مقدار كل منها <code>step</code>، أو يعاد ناتج تطبيق الدالة <code>transform</code> على [[Kotlin/String|سلاسل نصية]] حجم كل منها <code>size</code> جلبت من سلسلة المحارف المعطاة عند التحرك بخطوات ثابتة مقدار كل منها <code>step</code>.
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()windowed</code> مع سلسلة نصية===
مثالٌ على استعمال الدالة <code>()windowed</code>:<syntaxhighlight lang="kotlin">
تستدعي الشيفرة الآتية الدالة  <code>()windowed</code> عبر عدة [[Kotlin/String|سلاسل نصية]] وتمرر إليها عددين كوسيطين، و<nowiki/>تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
println("wiki.hsoub.com".windowed(size = 5, step = 1)) // [wiki., iki.h, ki.hs, i.hso, .hsou, hsoub, soub., oub.c, ub.co, b.com]
    val sequence = generateSequence(1) { it + 1 }
println("wiki.hsoub.com".windowed(size = 5, step = 3)) // [wiki., i.hso, soub., b.com]
 
    val windows = sequence.windowed(size = 5, step = 1)
    println(windows.take(4).toList()) // [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]
 
    val moreSparseWindows = sequence.windowed(size = 5, step = 3)
    println(moreSparseWindows.take(4).toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11], [10, 11, 12, 13, 14]]
 
    val fullWindows = sequence.take(10).windowed(size = 5, step = 3)
    println(fullWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8]]
 
    val partialWindows = sequence.take(10).windowed(size = 5, step = 3, partialWindows = true)
    println(partialWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10], [10]]
}
}
</syntaxhighlight>
</syntaxhighlight>مثالٌ على استعمال الدالة <code>()windowed</code> مع تمرير دالة:<syntaxhighlight lang="kotlin">
===استخدام الدالة <code>()windowed</code> مع سلسلة نصية مع تمرير دالة===
تستدعي الشيفرة الآتية الدالة <code>()windowed</code> عبر عدة [[Kotlin/String|سلاسل نصية]] وتمرر إليها عددين ودالة كوسائط، وتطبع الناتج<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
println("wiki.hsoub.com".windowed(size = 5, step = 1) {it.first()} ) // [w, i, k, i, ., h, s, o, u, b]
    val dataPoints = sequenceOf(10, 15, 18, 25, 19, 21, 14, 8, 5)
println("wiki.hsoub.com".windowed(size = 5, step = 3) {it.first()} ) // [w, i, s, b]
 
    val averaged = dataPoints.windowed(size = 4, step = 1, partialWindows = true) { window -> window.average() }
    println(averaged.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0, 9.0, 6.5, 5.0]
 
    val averagedNoPartialWindows = dataPoints.windowed(size = 4, step = 1).map { it.average() }
    println(averagedNoPartialWindows.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0]
}
}
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
==انظر أيضًا==
* <code>[[Kotlin/kotlin.text/trim|trim()]]</code>: تعيد الدالة <code>trim()‎</code> جزءًا من [[Kotlin/CharSequence/index|سلسلة الحروف]] أو [[Kotlin/String|السلسلة النصية]] التي استُدعيت عبرها بعد حذف الأحرف الأولى والأخيرالتي تحقق الشرط المنطقي المُحدّد <code>predicate.</code>
*الدالة <code>[[Kotlin/kotlin.text/windowedSequence|windowedSequence()]]</code> : تعيد [[Kotlin/sequences/Sequence|سلسلة]] تحتوي على [[Kotlin/String|سلاسل نصية]] بحجم معين ثابت جلبت من [[Kotlin/CharSequence|سلسلة المحارف]] التي استدعيت معها عند التحرك بخطوات محددة ثابتة، أو تحوي ناتج تطبيق دالة معينة على تلك السلاسل النصية المجلوبة.
 
*الدالة <code>[[Kotlin/kotlin.text/trim|trim()]]‎</code>: تحذف المحارف المحققة لشرط معين، أو محارف محددة، أو المسافات الفارغة من بداية ونهاية <nowiki/>[[Kotlin/CharSequence|سلسلة المحارف]] أو السلسلة النصية التي استُدعيت معها.
* <code>[[Kotlin/kotlin.text/substringAfter|substringAfter()]]‎</code>: تعيد  الدالة <code>substringAfter()‎</code> جزءًا من [[Kotlin/String|السلسلة النصية]] التي استُدعيت عبرها والمُتواجد بعد أول ظهور للمُحدِّد <code>delimiter،</code> إن لم تكن [[Kotlin/String|السلسلة النصية]] الأصلية تحتوي <code>delimiter</code>، فستعيد القيمة المُمرّرة <code>missingDelimiterValue</code>، والتي قيمتها الافتراضية هي [[Kotlin/String|السلسلة النصية]] الأصلية. 
* <code>[[Kotlin/kotlin.text/substringBefore|substringBefore()]]‎</code>: تعيد  الدالة <code>substringBefore()‎</code> جزءًا من [[Kotlin/String|السلسلة النصية]] التي استُدعيت عبرها والمُتواجد قبل أول ظهور للمُحدِّد <code>delimiter،</code> إن لم تكن [[Kotlin/String|السلسلة النصية]] الأصلية تحتوي <code>delimiter</code>، فستعيد القيمة المُمرّرة <code>missingDelimiterValue</code>، والتي قيمتها الافتراضية هي [[Kotlin/String|السلسلة النصية]] الأصلية. 
 
* <code>[[Kotlin/kotlin.text/removeSuffix|removeSuffix()]]‎</code>: إن كانت [[Kotlin/String|السلسلة النصية]] أو [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استٌدعيت عبرها الدالة <code>removeSuffix()‎</code> تنتهي باللاحقة <code>suffix</code> فستعيد [[Kotlin/String|سلسلة نصية]] أو [[Kotlin/CharSequence/index|سلسلة حروف]] جديدة مع حذف تلك اللاحقة، وإلا فستعيد [[Kotlin/String|السلسلة النصية]] أو [[Kotlin/CharSequence/index|سلسلة الحروف]] كما هي. 
* <code>[[Kotlin/kotlin.text/slice|slice()]]‎</code>: تعيد  الدالة <code>slice()‎</code> [[Kotlin/CharSequence/index|سلسلة حروف]] أو [[Kotlin/String|سلسلة نصية]] جديدة تحتوي الحروف التي تنتمي فهارسها إلى الوسيط المُمرر. 


* الدالة <code>[[Kotlin/kotlin.text/subSequence|subSequence()‎]]</code> : تعيد جزءًا محددًا من <nowiki/>[[Kotlin/CharSequence/index|سلسلة المحارف]] التي استُدعيت معها.
*الدالة <code>[[Kotlin/kotlin.text/slice|slice()]]‎</code>: تقتطع جزءًا محدَّدًا من <nowiki/>[[Kotlin/CharSequence/index|سلسلة المحارف]] أو السلسلة النصية  التي استُدعيت معها ثمَّ تعيده.
==مصادر==
==مصادر==
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/windowed.html الدالة text.windowed()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/windowed.html صفحة الدالة windowed()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
[[تصنيف:Kotlin Text]]

المراجعة الحالية بتاريخ 06:57، 7 سبتمبر 2018

تعيد الدالة windowed()‎ قائمة تحتوي على سلاسل نصية بحجم معين ثابت جلبت من سلسلة المحارف التي استدعيت معها عند التحرك بخطوات محددة ثابتة، أو تحوي ناتج تطبيق دالة معينة على تلك السلاسل النصية المجلوبة.

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

fun CharSequence.windowed(
    size: Int, 
    step: Int = 1, 
    partialWindows: Boolean = false
): List<String>

الإصدار المطلوب: Kotlin 1.2. تعيد الدالة windowed()‎ قائمة مكونة من سلاسل نصية حجم كل منها يساوي size جلبت من سلسلة المحارف التي استُدعيت معها في كل مرة تقفز فيها الدالة بخطوة ثابتة مقدارها step من المحارف. السلسة النصية الأخيرة المتبقية قد يكون طولها أقل من size، وتضاف إلى القيم المعادة إن كانت قيمة المعامل partialWindows هي true.

fun <R> CharSequence.windowed(
    size: Int, 
    step: Int = 1, 
    partialWindows: Boolean = false, 
    transform: (CharSequence) -> R
): List<R>

الإصدار المطلوب: Kotlin 1.2.

تعيد الدالة windowed()‎ قائمة تحتوي على نتائج تطبيق الدالة transform على سلاسل نصية حجم كل منها يساوي size جلبت من سلسلة المحارف التي استُدعيت معها في كل مرة تقفز فيها الدالة بخطوة ثابتة مقدارها step من المحارف. السلسة النصية الأخيرة المتبقية قد يكون طولها أقل من size، وتضاف إلى القيم المعادة إن كانت قيمة المعامل partialWindows هي true.

المعاملات

size

عدد صحيح موجب يحدد حجم السلاسل النصية المراد جلبها عند كل خطوة.

step

عدد صحيح موجب يحدد عدد الخطوات التي يراد أن تجلب عند كل منها سلسلة نصية بحجم size. القيمة الافتراضية هي: 1 (أي التحرك بمقدار محرف واحد).

partialWindows

قيمة منطقية تحدد إن كان يراد جلب السلسلة النصية الأخيرة المتبقية أم لا. القيمة الافتراضية هي: false (أي إهمال الجزء الأخير المتبقي).

transform

دالة تطبق على كل سلسلة نصية جلبت عند كل خطوة وتعيد القيمة المقابلة لها.

لاحظ أنّ سلسلة المحارف المُمرّرة إلى الدالة transform سريعة الزوال (ephemeral)، وهي متاحة فقط داخل الدالة. بناءً على ذلك، لا يجب عليك أن تُخزَّن بأي طريقة، إلا إن أعددت مقتطفًا (snapshot) منها.

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

تعاد قائمة تحتوي على سلاسل نصية حجم كل منها size جلبت من سلسلة المحارف المعطاة عند التحرك بخطوات ثابتة مقدار كل منها step، أو يعاد ناتج تطبيق الدالة transform على سلاسل نصية حجم كل منها size جلبت من سلسلة المحارف المعطاة عند التحرك بخطوات ثابتة مقدار كل منها step.

أمثلة

مثالٌ على استعمال الدالة ()windowed:

fun main(args: Array<String>) {
    val sequence = generateSequence(1) { it + 1 }

    val windows = sequence.windowed(size = 5, step = 1)
    println(windows.take(4).toList()) // [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]

    val moreSparseWindows = sequence.windowed(size = 5, step = 3)
    println(moreSparseWindows.take(4).toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11], [10, 11, 12, 13, 14]]

    val fullWindows = sequence.take(10).windowed(size = 5, step = 3)
    println(fullWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8]]

    val partialWindows = sequence.take(10).windowed(size = 5, step = 3, partialWindows = true)
    println(partialWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10], [10]]
}

مثالٌ على استعمال الدالة ()windowed مع تمرير دالة:

fun main(args: Array<String>) {
    val dataPoints = sequenceOf(10, 15, 18, 25, 19, 21, 14, 8, 5)

    val averaged = dataPoints.windowed(size = 4, step = 1, partialWindows = true) { window -> window.average() }
    println(averaged.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0, 9.0, 6.5, 5.0]

    val averagedNoPartialWindows = dataPoints.windowed(size = 4, step = 1).map { it.average() }
    println(averagedNoPartialWindows.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0]
}

انظر أيضًا

  • الدالة windowedSequence()‎ : تعيد سلسلة تحتوي على سلاسل نصية بحجم معين ثابت جلبت من سلسلة المحارف التي استدعيت معها عند التحرك بخطوات محددة ثابتة، أو تحوي ناتج تطبيق دالة معينة على تلك السلاسل النصية المجلوبة.
  • الدالة trim(): تحذف المحارف المحققة لشرط معين، أو محارف محددة، أو المسافات الفارغة من بداية ونهاية سلسلة المحارف أو السلسلة النصية التي استُدعيت معها.

مصادر