2.10 枚举类型

前面已经了解了几种基本的数据类型,相信读者也能进行一些简单的数据计算工作了。不过,在实际工作中,需要处理的数据和信息的类型可不止这几种,那么处理性别、星期几这类信息时,应该使用什么数据类型呢?

首先,这类数据都有些什么特点呢?性别只能是男和女,当然,用户也可能选择保密,这样就会有三个固定的数据。星期包括从星期日到星期六这7个数据值(这里假设每周的第一天为星期日)。代码中,如果只是简单地使用数字来表示,很可能会出现问题,例如输入错误、意外赋值等。

那么,如何解决这类问题呢?可以使用本节讨论的枚举类型来处理。

枚举是一种自定义的数据类型,其中定义了可用的数据(枚举值)。下面的代码定义了一个名为ESex的枚举类型,用于操作性别数据。

请注意,需要在方法的外部定义其他类型。定义枚举时,使用enum关键字,enum关键字后面指定枚举类型的名称。然后,枚举成员定义在一对花括号中,每个值使用逗号分隔。

定义枚举类型的变量(如代码中的sex变量)时,与定义基本数据类型应该是相同的,只是在赋值时使用了“<枚举类型>.<成员>”的形式指定枚举变量的值。

有些时侯,枚举数据可能需要转换为数值,例如需要保存到SQLite数据库中的时候,此时,可以使用类似下面的代码。

说明代码的功能之前,先介绍枚举类型的一个特点。枚举类型中,每个成员都会有一个整数索引值,第一个成员的索引值为0,第二个成员的索引值为1,以此类推。

当在枚举类型和整数类型之间进行转换时,实际上就是在成员索引值和成员名称之间进行转换。

再来看代码功能。第一个输出语句使用枚举类型变量sex的ordinal()方法获取其枚举成员的索引值。在第二个输出语句中,首先使用ESex.values()方法获取所有枚举成员组成的数组,然后获取索引值为2的成员,也就是第3个成员的成员,即female。

实际上,在学习面向对象编程和数组以后,这些代码都是非常容易理解的。而现在,只需要了解枚举成员和整数之间的转换方法就可以了。