Bazida 0 indekslangan collectionlarni ohirgi qiymatiga murojat qilishda ko'pchiligimiz yo'l qo'yadigon oddiy bir xatolik bor array[array.Length]
, va hozirham oramizda bu yerda xatolikni payqamaganlarxam bo'lishi mumkin. Bu error esa o'z vaqtida judaham kichik, payqa qolish qiyin va asabga o'ynaydigon hatoliklardan deb xisoblayman (array[array.Length - 1]
to'g'ri varianti).
C# 13-chi versiyasida Implicit Index Access -> yashirincha indeksga murojat degan feature qo'shildi. Bu feature ni ishlatishda bizga caret-^
operatori yordam beradi.
Misol:
int[] nums = new int[5] { 1, 2, 3, 4, 5 };
Conosle.WriteLine(nums[^1]);
// output -> 5
Implicit Index Access feature sini funksionalligi faqatgina ohirgi elementga murojat qilish bilan cheklanib qolmaydi. Bu xususiyat har-qanday 0
indekslangan collection ni oxiridan boshlab har bir qiymatiga murojat qilishda yordam beradi.
Misol:
int[] nums = [1, 2, 3, 4, 5];
for(int i = 1; i <= nums.Length; i++)
Console.Write($"{nums[^i]} ");
// output -> 5 4 3 2 1
Etibor berish kerak bolga joyi bu funksional ^1
(birdan) boshlanadi, bu degani arrayimizni uzunligi n
bolsa, oxirgi qiymatning indexi n-1
ga teng, shu bilan birgalikda ^1 = n-1
yaniy eng oxirgi indeksga ko'rsatib turadi, ^2
esa oxirgidan bitta oldingi(^2 = n-2) indeksga teng, va hokazo.
Arrayni teskari o'girish misoliga boshqacharoq qilib ishlatamiz
Misol:
int[] nums = [1, 2, 3, 4, 5];
foreach (var item in ReverseArray(nums))
Console.Write($"{item} ");
int[] ReverseArray(int[] array)
{
int[] reversed = new int[array.Length];
for(int i = 0; i < array.Length; i++) <---
reversed[i] = array[^(i+1)]; <---
return reversed;
}
// output -> 5 4 3 2 1
Bu safargi ko'dimizda i
1 ga emas 0 ga teng va array ni oxiridan murojatni boshlash uchun esa array[^(i+1)]
ishlatildi.
Bundan tashqari bu feature ni harkim o'z tassavuri yetganicha va albatta C# kompilyatori ruhsat berganicha ishlata oladi. @wahidustoz aytganlaridek "Sky is the limit".
Top comments (0)