Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

phrase = "Now here's a sentence"

phrase.split(" ").reverse.join(" ")

# "sentence a here's Now"

2.30. Удаление дубликатов

Цепочки повторяющихся символов можно сжать до одного методом

squeeze
:

s1 = "bookkeeper"

s2 = s1.squeeze # "bokeper"

s3 = "Hello..."

s4 = s3.squeeze # "Helo."

Если

указан параметр, то будут удаляться только дубликаты заданных в нем символов:

s5 = s3.squeeze(".") # "Hello."

Этот параметр подчиняется тем же правилам, что и параметр метода

count
(см. раздел 2.28), то есть допускаются дефис и символ
^
. Имеется также метод
squeeze!
.

2.31. Удаление заданных символов

Метод

delete
удаляет из строки те символы, которые включены в список, переданный в качестве параметра:

s1 = "To be, or not to be"

s2 = s1.delete("b") # "To e, or not to e"

s3 = "Veni, vidi, vici!"

s4 = s3.delete(",!") # "Veni vidi vici"

Этот параметр подчиняется тем же правилам, что и параметр метода

count
(см. раздел 2.28), то есть допускаются символы
(дефис) и
^
(каре). Имеется также метод
delete!
.

2.32. Печать специальных символов

Метод

dump
позволяет получить графическое представление символов, которые обычно не печатаются вовсе или вызывают побочные эффекты:

s1 = "Внимание" << 7 << 7 << 7 # Добавлено три символа ASCII BEL.

puts s1.dump # Печатается: Внимание\007\007\007

s2 = "abc\t\tdef\tghi\n\n"

puts s2.dump # Печатается: abc\t\tdef\tghi\n\n

s3 = "Двойная кавычка: \""

puts s3.dump # Печатается: Двойная кавычка: \"

При стандартном значении переменной

$KCODE
метод
dump
дает такой же эффект, как вызов метода
inspect
для строки. Переменная
$KCODE
рассматривается в главе 4.

2.33. Генерирование последовательности строк

Изредка бывает необходимо получить «следующую» строку. Так, следующей для строки

"aaa"
будет строка
"aab"
(затем
"aac"
,
"aad"
и так далее). В Ruby для этой цели есть метод
succ
:

droid = "R2D2"

improved = droid.succ # "R2D3"

pill = "Vitamin B"

pill2 = pill.succ # "Vitamin C"

He рекомендуется применять этот метод, если точно не известно, что начальное значение предсказуемо и разумно.

Если начать с какой-нибудь экзотической строки, то рано или поздно вы получите странный результат.

Существует также метод

upto
, который в цикле вызывает
succ
, пока не будет достигнуто конечное значение:

"Files, A".upto "Files, X" do | letter |

 puts "Opening: #{letter}"

end

# Выводится 24 строки.

Еще раз подчеркнем, что эта возможность используется редко, да и то на ваш страх и риск. Кстати, метода, возвращающего «предшествующую» строку, не существует.

2.34. Вычисление 32-разрядного CRC

Контрольный код циклической избыточности (Cyclic Redundancy Checksum, CRC) — хорошо известный способ получить «сигнатуру» файла или произвольного массива байтов. CRC обладает тем свойством, что вероятность получения одинакового кода для разных входных данных равна 1/2**N, где N — число битов результата (чаще всего 32).

Вычислить его позволяет библиотека zlib, написанная Уэно Кацухиро (Ueno Katsuhiro). Метод

crc32
вычисляет CRC для строки, переданной в качестве параметра.

require 'zlib'

include Zlib

crc = crc32("Hello") # 4157704578

crc = crc32(" world!",crc) # 461707669

crc = crc32("Hello world!") # 461707669 (то же, что и выше)

В качестве необязательного второго параметра можно передать ранее вычисленный CRC. Результат получится такой, как если бы конкатенировать обе строки и вычислить CRC для объединения. Это полезно, например, когда нужно вычислить CRC файла настолько большого, что прочитать его можно только по частям.

2.35. Вычисление МD5-свертки строки

Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест сообщения произвольной длины. Это разновидность свертки, то есть функция шифрования односторонняя, так что восстановить исходное сообщение по дайджесту невозможно. Для Ruby имеется расширение, реализующее MD5; интересующиеся могут найти его в каталоге

ext/md5
стандартного дистрибутива.

Для создания нового объекта MD5 есть два эквивалентных метода класса:

new
и
md5
:

require 'md5'

hash = MD5.md5

hash = MD5.new

Есть также четыре метода экземпляра:

clone
,
digest
,
hexdigest
и
update
. Метод
clone
просто копирует существующий объект, а метод
update
добавляет новые данные к объекту:

hash.update("Дополнительная информация...")

Можно создать объект и передать ему данные за одну операцию:

secret = MD5.new("Секретные данные")

Поделиться:
Популярные книги

Туман. Авель Санчес; Тиран Бандерас; Салакаин отважный. Вечера в Буэн-Ретиро

де Унамуно Мигель
141. Библиотека всемирной литературы
Проза:
классическая проза
5.00
рейтинг книги
Туман. Авель Санчес; Тиран Бандерас; Салакаин отважный. Вечера в Буэн-Ретиро

Путь воинов

Гир Уильям Майкл
2. Спайдер
Фантастика:
боевая фантастика
5.75
рейтинг книги
Путь воинов

Чувствуй себя как хочешь

Холланд Саммер
2. Парни из Манчестера
Любовные романы:
остросюжетные любовные романы
5.00
рейтинг книги
Чувствуй себя как хочешь

Наедине с собой

Сухомозский Николай Михайлович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Наедине с собой

Русский орфографический словарь [А-Н]

Лопатин Владимир Владимирович
Справочная литература:
справочники
5.00
рейтинг книги
Русский орфографический словарь [А-Н]

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

Джон Картер

Берроуз Эдгар Райс
Фантастика:
героическая фантастика
8.18
рейтинг книги
Джон Картер

Системный разведчик. Инфильтрация. Дилогия

Юрич Валерий
Системный разведчик
Фантастика:
боевая фантастика
рпг
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Системный разведчик. Инфильтрация. Дилогия

Баллистическая теория Ритца и картина мироздания

Семиков Сергей Александрович
Научно-образовательная:
технические науки
5.00
рейтинг книги
Баллистическая теория Ритца и картина мироздания

Женское здоровье. Большая медицинская энциклопедия

Коллектив авторов
Справочная литература:
энциклопедии
6.25
рейтинг книги
Женское здоровье. Большая медицинская энциклопедия

Шайтан Иван

Тен Эдуард
1. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Шайтан Иван

Именем закона. Сборник № 1

Ромов Анатолий Сергеевич
Детективы:
прочие детективы
4.00
рейтинг книги
Именем закона. Сборник № 1

На границе империй. Том 10. Часть 9

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 9

Том 12. Курт Воннегут

Воннегут Курт
Фантастика:
научная фантастика
5.00
рейтинг книги
Том 12. Курт Воннегут