حلقات: for.... في تعبير (F#)

Th هو تنفيذ الحلقات بناء هو يستخدم لتكرار عبر التلائمات لنمط في مجموعة قابل للتعداد مثل تعبير نطاق، التسلسل lهوt الصفيفة أو بناء غير ذلك يدعم التعداد.

for pattern in enumerable-expression do
   body-expression

ملاحظات

for…inيمكن مقارنة التعبير for eachكشف بلغات غير ذلك.NET لأن هو المستخدمة لتنفيذ حلقات عبر قيم الموجودة في عنصر مجموعة قابل للتعداد. ومع ذلك، for…inأيضا بدعم نقش مطابقة عبر المجموعة بدلاً من مجرد تكرار عبر مجموعة كاملة.

يمكن تعيين التعبير قابل للتعداد كـ مجموعة قابل للتعداد أو باستخدام ..عامل، كـ نطاق على نوع المتكاملة. تضمين مجموعات قابل للتعداد القوائم وتسلسلات صفائف، مجموعات والخرائط، و هكذا. تطبيق أي نوع IEnumerableيمكن أن تستخدم.

عندما تقوم بالتعبير نطاق باستخدام ..عامل التشغيل، يمكنك استخدم بناء الجملة التالي.

start .. finish

يمكنك أيضا استخدام نسخة تتضمن تزايد يسمى تخطي ، كـ في التعليمة البرمجية التالية.

start .. skip .. finish

عند استخدام نطاقات المتكاملة ومتغير عداد بسيطة كنموذج، سلوك طبيعيا زيادة المتغير العداد 1 في كل تكرار، ولكن إذا كان النطاق يحتوي تشغيل القيمة تخطي، زيادة عداد إلى القيمة تخطي بدلاً من ذلك.

يمكن أيضا استخدام قيم متطابقة في نقش في النص تعبير.

توضح الأمثلة تعليمات برمجية التالية استخدم for...inالتعبير.

// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
   printfn "%d" i

الإخراج هو كما يلي.

1
5
100
450
788

يوضح المثال التالي كيفية إلى تكرار حلقي عبر سلسلة، وكيف إلى استخدام نمط المجموعة بدلاً من متغير بسيطة.

let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
  printfn "%d squared is %d" a asqr

الإخراج هو كما يلي.

1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25
6 squared is 36
7 squared is 49
8 squared is 64
9 squared is 81
10 squared is 100

يوضح المثال التالي كيفية إلى تكرار حلقي عبر نطاق بسيط لعدد صحيح.

let function1() =
  for i in 1 .. 10 do
    printf "%d " i
  printfn ""
function1()

إخراج function1 هو كما يلي.

1 2 3 4 5 6 7 8 9 10

يوضح المثال التالي كيفية إلى تكرار حلقي عبر نطاق بتخطي 2، الذي يتضمن كل عنصر آخر من النطاق.

let function2() =
  for i in 1 .. 2 .. 10 do
     printf "%d " i
  printfn ""
function2()

الإخراج function2هو كـ. يلي

1 3 5 7 9

يوضح المثال التالي كيفية إلى استخدام نطاق أحرف.

let function3() =
  for c in 'a' .. 'z' do
    printf "%c " c
  printfn ""
function3()
let function3() =
  for c in 'a' .. 'z' do
    printf "%c " c
  printfn ""
function3()

الإخراج function3هو كـ. يلي

a b c d e f g h i j k l m n o p q r s t u v w x y z

يوضح المثال التالي كيفية إلى استخدام القيمة سالبة تخطي لتكرار إجراء.

let function4() =
    for i in 10 .. -1 .. 1 do
        printf "%d " i
    printfn " ... Lift off!"
function4()
let function4() =
  for i in 10 .. -1 .. 1 do
    printf "%d " i
  printfn ""
function4()

الإخراج function4هو كـ. يلي

10 9 8 7 6 5 4 3 2 1 ... Lift off!

يمكن أن يكون بداية ونهاية النطاق التعبيرات، مثل الوظائف، كما في ما يلي تعليمات برمجية.

let beginning x y = x - 2*y
let ending x y = x + 2*y

let function5 x y =
  for i in (beginning x y) .. (ending x y) do
     printf "%d " i
  printfn ""

function5 10 4

الإخراج function5مع هذا إدخال هو كـ. يلي

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

يوضح المثال التالي استخدام حرف بدل (_) عند العنصر هو لا يلزم في الحلقة.

let mutable count = 0
for _ in list1 do
   count <- count + 1
printfn "Number of elements in list1: %d" count

الإخراج هو كما يلي.

Number of elements in list1: 5

ملاحظة يمكنك استخدام for...inفي تسلسل التعبيرات وتعبيرات حساب غير ذلك، في هذه الحالة الإصدار مخصص من for...inالتعبير هو المستخدمة. لمزيد من المعلومات، راجع تسلسلات (F#) ، مهام سير العمل غير متزامن (F#) ، و التعبيرات احتساب (F#).

راجع أيضًا:

المرجع

حلقات: for... إلى تعبير (F#)

حلقات: بينما... هل تعبير (F#)

موارد أخرى

مرجع لغة ب #