洛伦谈MATLAB的艺术

将想法转化为MATLAB

字符串的事情

在MATLAB中处理文本已经随着时间的推移而发展。以前,文本数据存储在带有内部标志的双数组中,以表示它是文本。然后我们对这种表示进行了转换,使字符数组成为它们自己的类型。和我提到早期的我们引入了字符串datatype使处理文本数据更高效、更自然。让我再给你看一点。

目录

如何比较文本:过去的日子

在MATLAB的早期,我们使用了函数比较字符串比较字符串。对许多人来说,一个很大的警告是比较字符串与C语言对应项的行为方式不同。随着时间的推移,我们又添加了一些比较函数:

允许不区分大小写的匹配,并将匹配限制为N人物。

现在让我们做一些比较。首先是字符串的单元格数组…

cellChars={“水银”,“金星”,“地球”,“火星”}
cellChars = 1×4 cell array {'Mercury'} {'Venus'} {'Earth'} {'Mars'}
TF=strcmp(“弗雷德”,囚徒)
TF=1×4逻辑阵列0
TF=strcmp(“金星”,囚徒)
TF=1×4逻辑阵列0 1 0 0
TF = strncmp (“火星”cellChars, 2)
TF = 1×4 logical array 0 0 0 1 .单击“确定”
TF = strncmp (“好极了”cellChars, 2)
TF = 1×4 logical array 0 0 0 1 .单击“确定”
TF = strncmp (“好极了”,cellChars,4)
TF=1×4逻辑阵列0
TF = strcmpi (“火星”cellChars)
TF = 1×4 logical array 0 0 0 1 .单击“确定”
TF = strcmpi (“马尔”cellChars)
TF=1×4逻辑阵列0

更现代,不一样的用途

我们还介绍了分类用于限制字符串选择集是适当的情况的数组。使用分类变量,您可以使用==的比较。

catStr =分类(cellChars)
catStr = 1×4分类数组水星金星地球火星
TF=“火星”= = catStr
TF = 1×4 logical array 0 0 0 1 .单击“确定”

字符串比较大约2020年

现在是字符串比较。

str=字符串(cellChars)%或[“汞”,“金星”、“地球”,“火星”)
str=1×4字符串数组“水星”“金星”“地球”“火星”

我还可以用str*cmp*功能。但我们并不局限于这些功能。

TF=strcmp(“火星”str)
TF = 1×4 logical array 0 0 0 1 .单击“确定”

我们现在可以使用==和相关操作符,而不必担心字符数组可能出现的索引问题。

TF=str~=“火星”
TF=1×4逻辑阵列1 0

最近,我们介绍了这个函数匹配.

TF=匹配项(str,“地球”)
TF = 1×4 logical array 0 0 1 0

它有一些很好的特性,可以很好地处理字符串数组。比如寻找轨道在地球内部的行星。

TF=匹配项(str[“水星”,“金星”])
TF=1×4逻辑阵列11 0 0

当然,我可以忽略大小写,代码在我看来不那么神秘。

TF=匹配项(str,“地球”,“无知案例”,对)
TF = 1×4 logical array 0 0 1 0

正如所有这些情况一样,我们可以使用逻辑输出索引到原始数组中,以提取相关项。

str (TF)
ans=“地球”

我的建议是:在代码可读性方面犯错误

我在这里没有提到性能,但是最近几年的一个驱动因素字符串数据类型是效率和性能。我们一直在努力将其与使代码具有高度可读性的函数叠加。这使代码维护和代码传输更加顺利。我倾向于支持这一点,而不是勉强维持最后一秒的速度。对于字符串,您甚至可能不需要进行权衡。

采用字符串

你有没有看到足够的证据表明字符串是在MATLAB中处理文本数据的未来?告诉我们你的想法在这里.




与MATLAB®R2019b一起发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。