14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем 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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!