如何将字符串转换为枚举类型?

9
将枚举转换为字符数组很简单 - 只需调用char即可。
char(myenum.somevalue)

返回 'somevalue'

如何再次转换回来呢?我期望得到类似于 char2enum 的东西。

char2enum('somevalue', 'myenum')

返回 myenum.somevalue

是否有内置的函数可以实现这个功能,还是必须自己创建一个?

3个回答

6
你可以使用MATLAB的动态引用功能,通过字符串访问枚举而不是其符号名称。例如,给定一个类Weekdays
classdef Weekdays
   enumeration
    Monday, Tuesday, Wednesday, Thursday, Friday
   end
end

您可以通过以下几种方式访问Friday类型:

>> Weekdays.Friday  % Access symbolically

>> Weekdays.('Friday') % Access as a string

如果你有一个字符串变量,里面存储了类的名称,也可以使用它:
>> day = 'Friday'
>> Weekdays.(day)

顺便提一下,这个功能适用于MATLAB类方法、属性、事件以及结构体字段。

http://www.mathworks.com/help/matlab/matlab_prog/bsgigzp-1.html#bsgigzp-33


5

从字符创建枚举类型也很简单:只需创建枚举:

out = myenum.somevalue

返回的 out 类型是 myenum,值为 somevalue

如果您的字符串保存在变量中,请调用

someVariable = somevalue;
out = myenum.(someVariable)

这很麻烦,因为它意味着需要在每个枚举中实现类似的逻辑。在我提出的函数中,您传递枚举的名称,因此它知道可用的值是什么。 - Richie Cotton
这样的函数应该不难编写,但我想它应该已经存在了。 - Richie Cotton
1
@Richie Cotton:哦,我明白了。实际上,你只需要为所有枚举的超类创建一个静态方法。这个方法会调用类的构造函数并设置枚举的值,所以这应该不会太麻烦。 - Jonas
@Richie Cotton:查看文档让我相信这实际上非常、非常简单(请参见我的编辑)。 - Jonas
1
太好了。事实上,即使是 myenum.('somevalue') 也可以工作。 - Richie Cotton

2

我知道这个问题很久以前就被回答了,但我刚刚发现了一种不同的解决方案,在使用枚举作为参数块时可能会非常方便。此外,我在官方文档中找不到任何关于这个特性的参考,所以我想在这里发布它:

任何枚举的构造函数都可以使用一个元素名称作为唯一参数来调用。例如:

>> Weekdays('Friday')
  
ans = 

  Weekdays enumeration

    Friday

好的,所以我们可以省略点号。但这有什么意思呢?嗯,当使用枚举类型作为函数参数时,参数块允许从字符串/字符自动转换为枚举类型。

function test(day)
    arguments
        day Weekdays
    end
    day
end

.

>> test('Friday')

day = 

  Weekdays enumeration

    Friday

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接