串刪除非唯一的字符讓一些變量是字符串abac
,例如:從MATLAB /倍頻程
un =
{
[1,1] = abac
}
我需要改造它只是abc
,即去掉3D符號a
。 我不知道如何使字符串倍頻程功能變得很容易,而不是很大的變態。有任何想法嗎?
串刪除非唯一的字符讓一些變量是字符串abac
,例如:從MATLAB /倍頻程
un =
{
[1,1] = abac
}
我需要改造它只是abc
,即去掉3D符號a
。 我不知道如何使字符串倍頻程功能變得很容易,而不是很大的變態。有任何想法嗎?
爲了找到唯一的符號中的單元陣列內的單個串,使用unique
:
un =
{
[1,1] = abac
[1,2] = asdlfkjasdf
}
>> unique(un{1})
ans = abc
>> unique(un{2})
ans = adfjkls
要查找所有字符串的獨特元素一次,在結合使用cellfun
與unique
:
>> cellfun(@unique,un,'UniformOutput',false)
ans =
{
[1,1] = abc
[1,2] = adfjkls
}
請注意,默認情況下,unique
對結果的元素進行排序,與Matlab不同,Octave沒有stable
選項來關閉此行爲。
如果你想要它們出現在原始字符串上的順序中的唯一字符,答案仍然是unique
,但你需要它的第二個參數返回每個元素的第一個(或最後一個)索引。
octave> charv = "aaccbbahbc"
charv = aaccbbahbc
octave> [~, i] = unique (charv, "first")
i =
1 5 3 8
octave> charv(sort (i))
ans = acbh
或單行:
octave> charv(sort (nthargout (2, @unique, charv, "first")))
ans = acbh
如果你在一個單元陣列許多字符串,它變得有點複雜:
octave> charcv = {"aaccbbahbc", "erfyergfas"}
charcv =
{
[1,1] = aaccbbahbc
[1,2] = erfyergfas
}
octave> [~, i] = cellfun (@unique, charcv , {"first"}, "UniformOutput", false)
i =
{
[1,1] =
1 5 3 8
[1,2] =
9 1 3 7 2 10 4
}
octave> i = cellfun (@sort, i, "UniformOutput", false)
i =
{
[1,1] =
1 3 5 8
[1,2] =
1 2 3 4 7 9 10
}
octave> cellfun (@subsref, charcv, num2cell (struct ("type", "()", "subs", num2cell (i))), "UniformOutput", false)
ans =
{
[1,1] = acbh
[1,2] = erfygas
}
[簡短的回答(HTTP: //codegolf.stackexchange.com/a/59641/45297) –
好吧,最短的一個就是'unique' :) –
不幸的是,'unique'中沒有'stable'選項,所以結果總是排序的。我實際上正在研究代碼高爾夫的更長版本。我會取消它併發布。 – beaker