让一些变量是字符串abac
,例如:
un =
{
[1,1] = abac
}
我需要将其转换为abc
,即删除3d符号a
。
我没有想法如何使用字符串八度函数进行非常好的变换。有什么想法吗?
答案 0 :(得分:3)
要在单元格数组中的单个字符串中查找唯一符号,请使用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
选项来关闭此行为。
答案 1 :(得分:1)
如果你想要它们出现在原始字符串上的顺序中的唯一字符,答案仍然是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
}