Algoritm pdf


Download 292.61 Kb.
Pdf ko'rish
bet2/7
Sana17.12.2022
Hajmi292.61 Kb.
#1025440
1   2   3   4   5   6   7
Bog'liq
algoritm

GetEnumerator () usuli iteratorni ifodalaydi. Va biz foreach tsiklida kompaniya 
ob'ektida ro'yxatga olishni amalga oshirganimizda, hosilning yield return 
personnel[i];qo'ng'irog'iga murojaat qilinadi. Hosil qaytish bayonotiga kirishda 
joriy manzil saqlanib qoladi. Va foreach usuli yangi ob'ektni olish uchun keyingi 
iteratsiyaga o'tganda, iterator shu joydan bajarishni boshlaydi.
Xo'sh, foreach tsiklidagi asosiy dasturda iteratorni amalga oshirish tufayli haqiqiy 
ro'yxatga olish amalga oshiriladi:
__________________________________________________________________
var people = new
Person[] 

new
Person("Tom"), 
new
Person("Bob"), 
new
Person("Sam") 
};
var microsoft = new
Company(people);


foreach(Person employee in
microsoft)
{
Console.WriteLine(employee.Name);
}
__________________________________________________________________
Getenumerator() usulida iteratorni amalga oshirishda 
for loopida massivni takrorlash ishlatilgan bo'lsa-da, 
lekin buni qilish shart emas. Biz faqat bir nechta 
qo'ng'iroqlarni aniqlay olamiz:
__________________________________________________________________
public
IEnumerator
GetEnumerator()
{
yield
return personnel[0];
yield
return personnel[1];
yield
return personnel[2];
}
__________________________________________________________________
Bunday holda, har bir "qaytish rentabelligi" iborasi chaqirilganda, iterator joriy 
manzilni eslab qoladi va keyingi qo'ng'iroqlar bilan u erdan boshlanadi.
Nomlangan iterator
Yuqorida biz iteratorni yaratish uchun GetEnumerator usulidan foydalandik. 
Ammo hosil operatori har qanday usulda ishlatilishi mumkin, faqat shu usul 
IEnumerable interfeysi ob'ektini qaytarishi kerak. Bunday usullar nomlangan 
iteratorlar deb ham ataladi.
Keling, kompaniya sinfida shunday nomlangan iteratorni yarataylik va undan 
foydalanamiz:
__________________________________________________________________
class
Person
{
public
string Name { get; }
public
Person(string name) =>Name = name;
}
class
Company
{
Person[] personnel;
public
Company(Person[] personnel) => this.personnel = personnel;
public
int Length => personnel.Length;
public
IEnumerable
GetPersonnel(int max)
{
for
(int i = 0; i < max; i++)
{
if
(i == personnel.Length)


{
yield
break;
}
else
{
yield
return personnel[i];
}
}
}
}
__________________________________________________________________
Bu erda aniqlangan iterator - IEnumerable Get Personal(int max) usuli 
parametr sifatida chiqadigan ob'ektlar sonini oladi. Dastur jarayonida uning 
qiymati personnel massivining uzunligidan kattaroq bo'lishi mumkin. Va xatolikka 
yo'l qo'ymaslik uchun yield break operatori ishlatiladi. Ushbu bayonot iteratorning 
bajarilishini to'xtatadi.

Download 292.61 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling