从 MATLAB/octave 中的字符串中删除非唯一字符
Remove non-unique chars from string in MATLAB/octave
设某变量为字符串abac
,例如:
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
但您需要它的第二个参数,即 returns 第一个(或最后一个)索引每个元素。
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
}
设某变量为字符串abac
,例如:
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
但您需要它的第二个参数,即 returns 第一个(或最后一个)索引每个元素。
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
}