Main Content

matlab.lang.makeUniqueStrings

根据输入字符串构造唯一字符串

说明

示例

U = matlab.lang.makeUniqueStrings(S) 通过为重复的字符串或字符向量添加下划线和数字的方式,基于输入字符串或字符向量 S 构造唯一字符串或字符向量 U

示例

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) 指定 U 中的元素的最大长度 maxStringLength。如果 makeUniqueStringsmaxStringLength 的长度范围内不能保证 S 中元素的唯一性,则会返回错误。您可将此语法与上述语法中的任何输入参数一起使用。

示例

[U, modified] = matlab.lang.makeUniqueStrings(___) 返回一个逻辑数组 modified,指示哪些元素已修改。

示例

全部折叠

创建一个名称元胞数组,并使每个元素唯一。

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

makeUniqueStrings 函数为元素 3 和 5 中的重复字符名称添加下划线和递增数字。

不指定排除的值,使 U 中的字符向量唯一。

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

指定应从输出中排除字符向量 'Nick'

U = matlab.lang.makeUniqueStrings(S, 'Nick')
U = 1x7 cell
    {'John'}    {'Sue'}    {'Nick_1'}    {'John_1'}    {'Campion'}    {'John_2'}    {'Jason'}

makeUniqueStringsU 中排除 'Nick',并将在元素 3 中找到的第一个重复项修改为 'Nick_1'

从唯一元胞数组中排除工作区变量。

Sue = 42;
U = matlab.lang.makeUniqueStrings(S, who)
U = 1x7 cell
    {'John'}    {'Sue_1'}    {'Nick'}    {'John_1'}    {'Campion'}    {'John_2'}    {'Jason'}

因为 'Sue' 存在于工作区中,所以 makeUniqueStrings 通过添加下划线和数字来使此字符向量唯一。

创建一个字符向量数组并使前四个元素唯一。

S = {'quiz' 'quiz' 'quiz' 'exam' 'quiz' 'exam'};
U = matlab.lang.makeUniqueStrings(S, 1:4)
U = 1x6 cell
    {'quiz_1'}    {'quiz_2'}    {'quiz_3'}    {'exam_1'}    {'quiz'}    {'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
    {'quiz'}    {'quiz'}    {'quiz'}    {'exam'}    {'quiz'}    {'exam'}    {'quiz'}

U = matlab.lang.makeUniqueStrings(S, 1:4)
U = 1x7 cell
    {'quiz_1'}    {'quiz_2'}    {'quiz_3'}    {'exam_1'}    {'quiz'}    {'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 个字符。

创建一个名称元胞数组,并使每个元素唯一。modified 输出显示哪些输入元素已发生了修改。

S = ["John"    "Sue"    "Nick"    "John"    "Campion"    "John"    "Jason"];
[U, modified] = matlab.lang.makeUniqueStrings(S)
U = 1x7 string
    "John"    "Sue"    "Nick"    "John_1"    "Campion"    "John_2"    "Jason"

modified = 1x7 logical array

   0   0   0   1   0   1   0

输入参数

全部折叠

输入字符串,指定为字符向量、字符向量元胞数组或字符串数组。

要从 U 中排除的字符向量,指定为字符向量、字符向量元胞数组或字符串数组。

示例: 'dontDuplicateThis'

示例: {'excludeS1' 'excludeS2'}

示例: ["excludeThis" "andThis"]

示例: who

要保证其在整个数据集中唯一性的 S 的子集,指定为线性索引范围或大小和形状与 S 相同的逻辑数组。如果 S 中有重复项,则 makeUniqueStrings 函数仅修改 whichStringsIdx 指定的字符串。

如果 whichStringsIdx 是逻辑数组,则当相同位置处的数组元素具有值 true 时,将检查该处元素的唯一性。

示例: 1:5, logical([1 0 1]), [true false true]

U 中字符串的最大长度,指定为整数。如果 makeUniqueStringsmaxStringLength 的长度范围内不能保证 S 中元素的唯一性,则会返回错误。

输出参数

全部折叠

唯一字符串,以字符向量、字符向量元胞数组或字符串数组形式返回。输出与输入具有相同的维度 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 中推出