exponenta event banner

matlab.lang.makeUniqueStrings

Создание уникальных строк из входных строк

Описание

пример

U = matlab.lang.makeUniqueStrings(S) создает уникальные строки или символьные векторы, U, из входных строк или символьных векторов, S, путем добавления подчеркивания и числа к дубликатам.

пример

U = matlab.lang.makeUniqueStrings(S,excludedStrings) конструирует строки или векторы символов, которые являются уникальными в пределах U и в отношении excludedStrings. makeUniqueStrings функция не проверяет excludedStrings для уникальности.

пример

U = matlab.lang.makeUniqueStrings(S,whichStringsIdx) задает подмножество S чтобы сделать уникальным весь набор. makeUniqueStrings делает элементы в S(whichStringsIdx) уникальны между собой и по отношению к остальным элементам. makeUniqueStrings возвращает остальные элементы, не измененные в U. Используйте этот синтаксис, если имеется строковый массив или массив символьных векторов, и необходимо проверить, уникальны ли только некоторые элементы.

пример

U = matlab.lang.makeUniqueStrings(S,___, maxStringLength) определяет максимальную длину, maxStringLength, элементов в U. Если makeUniqueStrings невозможно создать элементы в S уникальный без превышения maxStringLength, возвращает ошибку. Этот синтаксис можно использовать с любым из входных аргументов предыдущих синтаксисов.

пример

[U, modified] = matlab.lang.makeUniqueStrings(___) возвращает логический массив, modified, указывая измененные элементы.

Примеры

свернуть все

Создайте массив ячеек имен и сделайте каждый элемент уникальным.

S = {'John' 'Sue' 'Nick' 'John' 'Campion' 'John' 'Jason'};
U = matlab.lang.makeUniqueStrings(S)
U = 1x7 cell
  Columns 1 through 6

    {'John'}    {'Sue'}    {'Nick'}    {'John_1'}    {'Campion'}    {'John_2'}

  Column 7

    {'Jason'}

makeUniqueStrings функция добавляет повторяющиеся имена в элементах 3 и 5 с подчеркиванием и приращением чисел.

Без указания исключенных значений сделайте векторы символов в U уникальный.

S = {'John' 'Sue' 'Nick' 'John' 'Campion' 'John' 'Jason'};
U = matlab.lang.makeUniqueStrings(S)
U = 1x7 cell
  Columns 1 through 6

    {'John'}    {'Sue'}    {'Nick'}    {'John_1'}    {'Campion'}    {'John_2'}

  Column 7

    {'Jason'}

Укажите, что символьный вектор, 'Nick', должны быть исключены из выходных данных.

U = matlab.lang.makeUniqueStrings(S, 'Nick')
U = 1x7 cell
  Columns 1 through 5

    {'John'}    {'Sue'}    {'Nick_1'}    {'John_1'}    {'Campion'}

  Columns 6 through 7

    {'John_2'}    {'Jason'}

makeUniqueStrings исключает 'Nick' от U и вместо этого изменяет первый дубликат, найденный в элементе 3, чтобы быть 'Nick_1'.

Исключить переменные рабочей области из уникального массива ячеек.

Sue = 42;
U = matlab.lang.makeUniqueStrings(S, who)
U = 1x7 cell
  Columns 1 through 5

    {'John'}    {'Sue_1'}    {'Nick'}    {'John_1'}    {'Campion'}

  Columns 6 through 7

    {'John_2'}    {'Jason'}

С тех пор 'Sue' существует в рабочей области, makeUniqueStrings делает этот вектор символом уникальным, добавляя знак подчеркивания и число.

Создайте массив символьных векторов и сделайте уникальными только первые четыре элемента.

S = {'quiz' 'quiz' 'quiz' 'exam' 'quiz' 'exam'};
U = matlab.lang.makeUniqueStrings(S, 1:4)
U = 1x6 cell
  Columns 1 through 5

    {'quiz_1'}    {'quiz_2'}    {'quiz_3'}    {'exam_1'}    {'quiz'}

  Column 6

    {'exam'}

Первые четыре элемента в U являются уникальными между собой и среди остальных векторов символов в элементах 5 и 6 ('quiz' и 'exam'). Для достижения тех же результатов можно использовать логический массив вместо диапазона линейных индексов: U = matlab.lang.makeUniqueStrings(S, [true true true true false false]) или U = matlab.lang.makeUniqueStrings(S, logical([1 1 1 1 0 0])).

Добавить дубликат 'quiz' на конец S и сделать первые четыре элемента уникальными.

S{end+1} = 'quiz'
S = 1x7 cell
  Columns 1 through 6

    {'quiz'}    {'quiz'}    {'quiz'}    {'exam'}    {'quiz'}    {'exam'}

  Column 7

    {'quiz'}

U = matlab.lang.makeUniqueStrings(S, 1:4)
U = 1x7 cell
  Columns 1 through 5

    {'quiz_1'}    {'quiz_2'}    {'quiz_3'}    {'exam_1'}    {'quiz'}

  Columns 6 through 7

    {'exam'}    {'quiz'}

Векторы символов, которые makeUniqueStrings проверки по-прежнему являются уникальными как между собой, так и между остальными элементами. С тех пор makeUniqueStrings не проверяет элементы после элемента 4, векторы повторяющихся символов остаются.

Создание массива из S где первые три элемента уникальны и максимальная длина каждой строки равна 5.

S = {'sampleData' 'sampleData' 'sampleData' 'sampleData'};
U = matlab.lang.makeUniqueStrings(S, 1:3, 5)
U = 1x4 cell
    {'sampl'}    {'sam_1'}    {'sam_2'}    {'sampleData'}

Первый элемент усечен до 5 символов. Второй и третий элементы усечены до 3 символов, чтобы разрешить makeUniqueStrings для добавления символа подчеркивания и цифры, но не более 5 символов.

S = {'a%name', 'name_1', '2_name'};
[N, modified] = matlab.lang.makeValidName(S)
N = 1x3 cell
    {'a_name'}    {'name_1'}    {'x2_name'}

modified = 1x3 logical array

   1   0   1

makeValidName второй элемент не был изменен.

Входные аргументы

свернуть все

Входные строки, заданные как символьный вектор, массив ячеек символьных векторов или строковый массив.

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

Пример: 'dontDuplicateThis'

Пример: {'excludeS1' 'excludeS2'}

Пример: ["excludeThis" "andThis"]

Пример: who

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

Если whichStringsIdx является логическим массивом, элементы проверяются на уникальность, когда элемент массива в той же позиции имеет значение true.

Пример: 1:5, logical([1 0 1]), [true false true]

Максимальная длина строк в U, указано как целое число. Если makeUniqueStrings невозможно создать элементы в S уникальный без превышения maxStringLength, возвращает ошибку.

Выходные аргументы

свернуть все

Уникальные строки, возвращаемые в виде символьного вектора, массива ячеек символьных векторов или массива строк. Выходные данные имеют тот же размер, что и входные данные, S.

Индикатор измененных элементов, возвращаемый как логический скаляр или массив и имеющий ту же размерность, что и вход, S. Значение 1 (true) указывает, что makeUniqueStrings изменил элемент в соответствующем расположении. Значение 0 (false) указывает, что makeUniqueStrings нет необходимости изменять элемент в соответствующем расположении.

Совет

  • Чтобы убедиться, что входные значения действительны и уникальны, используйте matlab.lang.makeValidName прежде matlab.lang.makeUniqueStrings.

    S = {'my.Name','my_Name','my_Name'};
    validValues = matlab.lang.makeValidName(S)
    validUniqueValues = matlab.lang.makeUniqueStrings(validValues,...
        {},namelengthmax)
    validValues = 
    
        'my_Name'    'my_Name'    'my_Name'
    
    
    validUniqueValues = 
    
        'my_Name'    'my_Name_1'    'my_Name_2'

Представлен в R2014a