Main Content

matlab.lang.makeUniqueStrings

入力文字列からの一意の文字列の作成

説明

U = matlab.lang.makeUniqueStrings(S) は、重複するものにアンダースコアと数字を追加することにより、入力 string または文字ベクトル S から一意の string または文字ベクトル U を作成します。

U = matlab.lang.makeUniqueStrings(S,excludedStrings) は、excludedStrings を考慮して U 内で一意の string または文字ベクトルを作成します。関数 makeUniqueStrings は、excludedStrings の一意性をチェックしません。

U = matlab.lang.makeUniqueStrings(S,whichStringsIdx) は、セット全体で一意となる S のサブセットを指定します。makeUniqueStrings は、S(whichStringsIdx) 内の要素が、それらの要素の中で一意になり、さらに残りの要素に対しても一意になるようにします。makeUniqueStrings は、残りの要素を変更せずに U に返します。ある string 配列または文字ベクトルの配列において、一部の要素のみが一意であることを確認する必要がある場合に、この構文を使用します。

U = matlab.lang.makeUniqueStrings(S,___, maxStringLength)U の要素の最大長 maxStringLength を指定します。makeUniqueStrings が、maxStringLength 以内で S の要素を一意にできない場合、エラーが返されます。この構文では、前述の構文の入力引数のいずれかを使用できます。

[U, modified] = matlab.lang.makeUniqueStrings(___) は、変更された要素を表す logical 配列 modified を返します。

すべて折りたたむ

名前の cell 配列を作成し、各要素を一意にします。

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 は、'Nick'U から除外し、代わりに、要素 3 で見つかった最初の重複を 'Nick_1' に変更します。

一意の cell 配列からワークスペース変数を除外します。

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

'Sue' はワークスペース内に存在するので、makeUniqueStrings は、アンダースコアと数字を追加して、この文字ベクトルを一意にします。

文字ベクトルの配列を作成し、最初の 4 つの要素のみを一意にします。

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 にある最初の 4 つの要素を互いに一意にし、さらに残りの文字ベクトル、要素 5 と 6 ('quiz''exam') に対しても一意となるようにします。もしくは、線形インデックスの範囲の代わりに logical 配列を使用しても、同じ結果を得ることができます。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 の終わりに追加して、最初の 4 つの要素を一意にします。

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 から配列を作成します。ここで、最初の 3 つの要素は一意であり、各文字列の最大長は 5 です。

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

最初の要素は 5 文字で打ち切られます。2 番目と 3 番目の要素は、makeUniqueStrings がアンダースコアと数字を追加しても 5 文字を超えないように、3 文字で打ち切られます。

名前の cell 配列を作成し、各要素を一意にします。出力 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

入力引数

すべて折りたたむ

入力 string。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。

U から除外する文字ベクトル。文字ベクトル、文字ベクトルの cell 配列または string 配列として指定します。

例: 'dontDuplicateThis'

例: {'excludeS1' 'excludeS2'}

例: ["excludeThis" "andThis"]

例: who

セット全体の中で一意にする S のサブセット。線形インデックスの範囲または S と同じサイズと形状をもつ logical 配列として指定します。S に重複がある場合、関数 makeUniqueStrings は、whichStringsIdx で指定される文字列のみを変更します。

whichStringsIdx が logical 配列の場合、それと同じ位置にある配列要素の値が true のときに、要素の一意性がチェックされます。

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

U の string の最大長。整数として指定します。makeUniqueStrings が、maxStringLength 以内で S の要素を一意にできない場合、エラーが返されます。

出力引数

すべて折りたたむ

一意の string。文字ベクトル、文字ベクトルの cell 配列または string 配列として返されます。出力の次元は、入力 S と同じです。

変更された要素のインジケーター。入力 S と同じ次元をもつ logical スカラーまたは logical 配列として返されます。値が 1 (true) の場合、makeUniqueStrings が、対応する位置にある要素を変更したことを示しています。値が 0 (false) の場合、makeUniqueStrings は対応する位置にある要素を変更する必要がなかったことを示しています。

ヒント

  • 入力値が必ず有効かつ一意になるようにするため、matlab.lang.makeValidNamematlab.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 で導入