目录
matlab.lang.makeUniqueStrings的功能是根据输入字符串构造唯一字符串
语法
U = matlab.lang.makeUniqueStrings(S)
U = matlab.lang.makeUniqueStrings(S,excludedStrings)
U = matlab.lang.makeUniqueStrings(S,whichStringsIdx)
U = matlab.lang.makeUniqueStrings(S,___, maxStringLength)
[U, modified] = 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。如果 makeUniqueStrings 在 maxStringLength 的长度范围内不能保证 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'}
makeUniqueStrings 从 U 中排除 '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
参数说明
S
— 输入值
输入字符串,指定为字符向量、字符向量元胞数组或字符串数组。
excludedStrings
— 要排除的字符串
要从 U
中排除的字符向量,指定为字符向量、字符向量元胞数组或字符串数组。
whichStringsIdx
— 要保证其唯一性的字符串子集
要保证其在整个数据集中唯一性的 S 的子集,指定为线性索引范围或大小和形状与 S 相同的逻辑数组。如果 S 中有重复项,则 makeUniqueStrings 函数仅修改 whichStringsIdx 指定的字符串。
如果 whichStringsIdx 是逻辑数组,则当相同位置处的数组元素具有值 true 时,将检查该处元素的唯一性。
maxStringLength
— 字符串的最大长度
U 中字符串的最大长度,指定为整数。如果 makeUniqueStrings 在 maxStringLength 的长度范围内不能保证 S 中元素的唯一性,则会返回错误。
U
— 唯一字符串
唯一字符串,以字符向量、字符向量元胞数组或字符串数组形式返回。输出与输入具有相同的维度 S
。
modified
— 元素修改指示符
元素修改指示符,以逻辑标量或数组形式返回,与输入 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'