. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
пр<strong>е</strong>дм<strong>е</strong>ты колл<strong>е</strong>кционирования<br />
Пробл<strong>е</strong>мы работы с массивами<br />
Массивы пр<strong>е</strong>красно подходят для хран<strong>е</strong>ния фиксированного списка знач<strong>е</strong>ний или ссылок. Но как только<br />
возника<strong>е</strong>т н<strong>е</strong>обходимость пом<strong>е</strong>нять эл<strong>е</strong>м<strong>е</strong>нты м<strong>е</strong>стами или добавить новы<strong>е</strong> знач<strong>е</strong>ния, ситуация осложня<strong>е</strong>тся.<br />
Каждый массив им<strong>е</strong><strong>е</strong>т длину, которую вы должны знать. Для получ<strong>е</strong>ния пустых<br />
эл<strong>е</strong>м<strong>е</strong>нтов можно воспользоваться ссылкой на н<strong>е</strong>опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>нно<strong>е</strong> знач<strong>е</strong>ни<strong>е</strong> null:<br />
П а р а м <strong>е</strong> т р L en g th э т о <br />
го м а сси ва р а в<strong>е</strong>н 7, но<br />
в н <strong>е</strong>м х р а н и т ся и н ф о р <br />
м аци я т о л ьк о о т р <strong>е</strong> х<br />
к а р т а х .<br />
О<br />
Чтобы отсл<strong>е</strong>дить колич<strong>е</strong>ство им<strong>е</strong>ющихся карт, создадим пол<strong>е</strong> t o p C a r d типа<br />
i n t для хран<strong>е</strong>ния информации об инд<strong>е</strong>кс<strong>е</strong> посл<strong>е</strong>дн<strong>е</strong>й карты. Парам<strong>е</strong>тр L e n g t h<br />
наш<strong>е</strong>го массива им<strong>е</strong><strong>е</strong>т знач<strong>е</strong>ни<strong>е</strong> 7, в то вр<strong>е</strong>мя как t o p C a r d равно 3.<br />
^ m L о т сл <strong>е</strong>ж и ва <strong>е</strong>т к о л и ч <strong>е</strong>-<br />
c ^ H d S Z ,<br />
эл <strong>е</strong> м <strong>е</strong> н т ы<br />
с сы л а ю т ся на знач<strong>е</strong>ни<strong>е</strong> null.<br />
о<br />
Можно добавить м<strong>е</strong>тод Р <strong>е</strong> <strong>е</strong> к {), возвращающий ссылку на в<strong>е</strong>рхнюю карту, сымитировав<br />
взяти<strong>е</strong> в<strong>е</strong>рхн<strong>е</strong>й карты из колоды. А как добавить карту? Если парам<strong>е</strong>тр<br />
t o p C a r d м<strong>е</strong>ньш<strong>е</strong> длины массива, карта добавля<strong>е</strong>тся в массив, а знач<strong>е</strong>ни<strong>е</strong><br />
t o p C a r d ув<strong>е</strong>личива<strong>е</strong>тся на 1. В противном случа<strong>е</strong> нужно создать новый, больший<br />
массив и скопировать туда им<strong>е</strong>ющи<strong>е</strong>ся карты. Удаляя"кЕфтуГвы вычита<strong>е</strong>т<strong>е</strong>'<br />
1 из to p C ard и возвраща<strong>е</strong>т<strong>е</strong> эл<strong>е</strong>м<strong>е</strong>нту массива знач<strong>е</strong>ни<strong>е</strong> null. А как удалить карту<br />
из с<strong>е</strong>р<strong>е</strong>дины? Посл<strong>е</strong> удал<strong>е</strong>ния карты 4 нужно см<strong>е</strong>стить вниз карту 5, зат<strong>е</strong>м<br />
карту 6 и т. д.<br />
Это мож<strong>е</strong>т сд<strong>е</strong>лать<br />
встро<strong>е</strong>нный м<strong>е</strong>тод<br />
.NET A rray.R esizeQ .<br />
346 глава 8