Документация Engee
Notebook

Создание массивов строк

Массивы строк хранят фрагменты текста и предоставляют набор функций для работы с ними. Можно индексировать, менять форму и объединять массивы строк точно так же, как массивы любого другого типа. В этом материале рассмотрим некоторые функции для работы со строковыми массивами.


Каждый элемент массива строк содержит последовательность символов 1 на n.

In [ ]:
str = "Hello, world"
Out[0]:
"Hello, world"

Создадим матрицу строк, используя оператор [].

In [ ]:
satellites = ["Ganymede" "Europa" "Callisto";"Amalthea" "Rings of Jupiter" "Leda"]
Out[0]:
2×3 Matrix{String}:
 "Ganymede"  "Europa"            "Callisto"
 "Amalthea"  "Rings of Jupiter"  "Leda"

Массивы строк поддерживают индексирование. Используем индексацию для доступа к первой строке матрицы str.

In [ ]:
satellites[1,:]
Out[0]:
3-element Vector{String}:
 "Ganymede"
 "Europa"
 "Callisto"

Обратимся ко второму элементу во второй строке str.

In [ ]:
satellites[2,2]
Out[0]:
"Rings of Jupiter"

Определить размер заданной матрицы можно с помощью функции size().

In [ ]:
size(satellites)
Out[0]:
(2, 3)

Количество элементов массива с помощью функции length().

In [ ]:
length(satellites)
Out[0]:
6

Также можно определить, какое количество символов в каждом элементе массива строк. Если поставить точку перед круглыми скобками. Это будет означать, что мы обращаемся к элементу массива и применяем к нему функцию length().

In [ ]:
length.(satellites)
Out[0]:
2×3 Matrix{Int64}:
 8   6  8
 8  16  4

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

In [ ]:
using Dates

d = now()
string(d)
Out[0]:
"2024-05-20T12:28:05.120"

Создание пустых строк

Массивы строк могут содержать как пустые, так и отсутствующие значения. Пустая строка содержит ноль символов. При отображении пустой строки результатом является пара двойных кавычек, внутри которых ничего нет (""). Пропущенная строка эквивалентна строке NaN для числовых массивов. Она указывает, где в строковом массиве отсутствуют значения. При отображении пропущенной строки результатом будет missing.

Создать пустую строку можно с помощью функции String().

In [ ]:
str = String("")
Out[0]:
""

Создать матрицу пустых строк можно, например, используя функцию fill().

In [ ]:
str = fill("",(2,3))
Out[0]:
2×3 Matrix{String}:
 ""  ""  ""
 ""  ""  ""

Чтобы создать пропущенную строку, нужно присвоить переменной ключевое слово missing.

In [ ]:
str = missing
Out[0]:
missing

Вы можете создать массив строк как с пустыми, так и с пропущенными строками.

In [ ]:
str = ["" "Ram" missing]
Out[0]:
1×3 Matrix{Union{Missing, String}}:
 ""  "Ram"  missing

Используйте функцию ismissing(), чтобы определить, какие элементы являются строками с пропущенными значениями. Обратите внимание, что пустая строка не является пропущенной строкой.

In [ ]:
ismissing.(str)
Out[0]:
1×3 BitMatrix:
 0  0  1

Найдем символы пробела при помощи функции occursin() в строке и заменим их на тире функцией replace().

In [ ]:
TF = occursin.(" ", satellites)
Out[0]:
2×3 BitMatrix:
 0  0  0
 0  1  0
In [ ]:
satellites = replace.(satellites, " " => "-")
display(satellites)
2×3 Matrix{String}:
 "Ganymede"  "Europa"            "Callisto"
 "Amalthea"  "Rings-of-Jupiter"  "Leda"

Разделение, объединение и сортировка массива строк

Объединяйте строки в массив строк точно так же, как вы бы объединяли массивы любого другого типа.

In [ ]:
str1 = ["a","b","c"];
str2 = ["d","e","f"];
str3 = ["g","h","i"];
str = [str1 str2 str3]
Out[0]:
3×3 Matrix{String}:
 "a"  "d"  "g"
 "b"  "e"  "h"
 "c"  "f"  "i"

Функция permutedims() позволяет транспонировать матрицы со строковыми элементами.

In [ ]:
str = permutedims(str)
Out[0]:
3×3 Matrix{String}:
 "a"  "b"  "c"
 "d"  "e"  "f"
 "g"  "h"  "i"

Чтобы добавить текст к строкам, используйте оператор оператор *. Оператор добавляет текст к строкам, но не изменяет размер массива строк.

In [ ]:
Name = ["Mary", "John", "Elizabeth", "Paul", "Ann"]
Name = [name * " Smith" for name in Name]
Out[0]:
5-element Vector{String}:
 "Mary Smith"
 "John Smith"
 "Elizabeth Smith"
 "Paul Smith"
 "Ann Smith"

Например, объединим массив имен и фамилий.

In [ ]:
Name = ["Mary", "John", "Elizabeth", "Paul", "Ann"];
Lastname = ["Jones", "Adams", "Young", "Burns", "Spencer"];
full_names = Name .* " " .* Lastname
Out[0]:
5-element Vector{String}:
 "Mary Jones"
 "John Adams"
 "Elizabeth Young"
 "Paul Burns"
 "Ann Spencer"

Но также существует функция разделения split(). С ее помощью можно разделеть строковые элементы массива.

In [ ]:
full_names = split.(full_names)
Out[0]:
5-element Vector{Vector{SubString{String}}}:
 ["Mary", "Jones"]
 ["John", "Adams"]
 ["Elizabeth", "Young"]
 ["Paul", "Burns"]
 ["Ann", "Spencer"]

Сортирувку строковых элементов позволяет сделать функция sort().

In [ ]:
sort(Name)
Out[0]:
5-element Vector{String}:
 "Ann"
 "Elizabeth"
 "John"
 "Mary"
 "Paul"

Помимо рассмотренных примеров работы со строковыми массивами, существует еще целый ряд функций. Подробнее ознакомиться с функционалом можно в разделе Массивы.