понедельник, 9 января 2012 г.

Коллекции. Методы. Часть 4


Потихоньку продолжаю рассказывать про методы коллекций. Сегодня уже надо будет заканчивать эту тему, а то уже, а то опять много частей в одной серии получилось. Но сегодня – точно последняя потому, что будут рассмотрены два последних метода коллекций (причем у них даже функции примерно одинаковые).

Завтра уже опять на работу надо будет идти. Эх — вот и закончились наши небольшие выходные, опять рабочие будни будут. Кто-то, кстати, и сегодня уже начал работать. В общем — всех поздравляю с наступившей трудовой неделей (первой) в этом 2012 году. Надеюсь все эти недели будут очень плодотворными и полезными для всех наших дел, которые мы будем начинать.

Итак, рассмотрю сегодня методы:

TRIM
DELETE

TRIM:

В прошлой статье этой серии я рассмотрел метод EXTEND, который увеличивал размер коллекции. А вот методы TRIM – его противоположность, он урезает коллекцию. Причем – урезает он ее только начиная с конца (вырезает только последние символы из коллекции). Существует два вида вызова этого метода:

TRIM без параметров – вырезает последний элемент коллекции;
TRIM(n) – вырезает n последних элементов коллекции;

DECLARE
TYPE tk IS TABLE OF INTEGER;
tv tk := tk(1,3,4,5,6);
BEGIN
dbms_output.put_line(to_char(tv.COUNT)); --5
tv.TRIM;
dbms_output.put_line(to_char(tv.COUNT)); --4
tv.TRIM(2);
dbms_output.put_line(to_char(tv.COUNT)); --2
tv.TRIM(3); -- SUBSCRIPT_BEYOND_COUNT
END;

Вырезанные элементы восстановить нельзя, они больше нигде не учитываются, так что не теряйте их.

Если попробовать вырезать методов TRIM больше элементов, чем есть в коллекции – то данный метод вернет ошибку SUBSCRIPT_BEYOND_COUNT.

DELETE:

И еще один методы тоже для уменьшения коллекций – DELETE. Только у этого метода происходит не вырезание – а удаление элементов коллекции. Существует целых три различных вида вызова данного метода:

DELETE без аргументов – удаляем все элементы из коллекции и присваивает методы COUNT значение 0;
DELETE(n) – удаляет n-ый элемент коллекции, если n не существует (NULL) – то методы ничего не сделает;
DELETE(m,n) – удаляет все элементы начиная с m и заканчивая n. Если m > n – то ничего удалено не будет;

DECLARE
TYPE tk IS TABLE OF INTEGER;
tv tk := tk(1,3,4,5,6,3,4,5,12,333,3);
BEGIN
dbms_output.put_line(to_char(tv.COUNT)); --11
tv.DELETE(1);
dbms_output.put_line(to_char(tv.COUNT)); --10
tv.DELETE(3,5);
dbms_output.put_line(to_char(tv.COUNT)); --7
tv.DELETE(2,2);
dbms_output.put_line(to_char(tv.COUNT)); --6
tv(2) := 44;
dbms_output.put_line(to_char(tv.COUNT)); --7
tv.DELETE;
dbms_output.put_line(to_char(tv.COUNT)); --0
END;

Если вы работаете с массивами – то лучше не использовать методы DELETE(n) – так у вас разряженность появится, чего лучше избегать. Так что к массивами – применяйте отсекающие метод TRIM.

Отличие:

И теперь – отличие методов DELETE и TRIM. Последний, как это уже было сказано – отсекает элементы. То есть – их больше восстановить нельзя (присвоив новые значения). А вот удаленным элементам методов DELETE – можно присвоить новые значения, как мы видим в примере. Так что о такой возможности не забывайте.

Вот и все – с методами коллекций мы закончили. Теперь осталось только рассмотреть немного информации о записях – и все, можно будет переходить к следующей теме. Но – я пока небольшую передышку себе дам – все-таки новый год, так что к записям решил не приступать, сделаю это в следующем году. Так что – до встречи.

Комментариев нет:

Отправить комментарий