Ruby разделяет 2 символа из массива из 4 символов

у меня есть массив из 4 символов = ["0222"] Нужно разделить на 2 группы по 2 человека в каждой.

Нужно получить массив = ["02","22"] Попробуйте разделить, но не могу получить нужный мне результат.

Есть ли причина, по которой ваша 4-символьная строка завернута в массив? Может ли массив содержать более одной строки? Если да, то каков будет ожидаемый результат? А как насчет строк, содержащих менее или более 4 символов?

Stefan 18.11.2022 18:25

Ваша формулировка несколько сумбурна и неточна. На самом деле у вас есть массив с одним элементом. Этот единственный элемент представляет собой строку из 4 символов. Что вам действительно нужно сделать, так это получить доступ и разделить эту строку.

Michael B 25.11.2022 22:49
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать выполнить регулярное выражение, соответствующее шаблону \d{1,2}:

nums = "0222".scan(/\d{1,2}/)
puts nums

Это печатает:

02
22

При проверке объектов вы можете использовать p, что напечатает ["02", "22"] здесь.

Stefan 18.11.2022 18:23
Ответ принят как подходящий

Несколько других вариантов для игры:

Использование String#[]:

array_1 = ["0222"]
array_2 = [array_1[0][0..1], array_1[0][2..-1]]  #=>  ["02", "22"]
array_2 = [array_1[0][0, 2], array_1[0][2, 2]]  #=>  ["02", "22"]

Используя String#split (в этом примере вместе с регулярным выражением, группой захвата, просмотром назад и пределом):

array_1 = ["0222"]
array_2 = array_1[0].split(/(?<=\d{2})/, 2)
#=>  ["02", "22"]

Использование String#partition (в этом примере вместе с методом Array#drop, чтобы творчески разделить строку в определенном месте, а затем сохранить только это совпадение вместе с оставшимся элементом):

array_1 = ["0222"]
array_2 = array_1[0].partition(/.{2}/).drop(1)
#=>  ["02", "22"]

Использование String#split вместе с String#insert для принудительного разделения в определенном месте:

array_1 = ["0222"]
array_2 = array_1[0].insert(2, " ").split
#=>  ["02", "22"]

Или, может быть, даже используя String#split и регулярное выражение вместе с Array#[] вот так:

array_1 = ["0222"]
array_2 = array_1[0].split(/^(..)/)[1, 2]
#=>  ["02", "22"]

Много-много потенциальных решений, которые можно использовать в любом количестве комбинаций. Однако я считаю, что лучшим решением является использование метода String#scan, как уже упоминал @Tim Biegeleisen.

Другие вопросы по теме