首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合WideChar:集合最多可能有256个元素

集合WideChar:集合最多可能有256个元素
EN

Stack Overflow用户
提问于 2016-06-21 05:31:06
回答 2查看 1K关注 0票数 8

我有一句台词:

代码语言:javascript
复制
const
  MY_SET: set of WideChar = [WideChar('A')..WideChar('Z')];

上面没有编译,但有错误:

错误集最多可能有256个元素。

但是,这一行确实编译了ok:

代码语言:javascript
复制
var WS: WideString;
if WS[1] in [WideChar('A')..WideChar('Z')] then...

这也编译了ok:

代码语言:javascript
复制
const
  MY_SET = [WideChar('A')..WideChar('Z'), WideChar('a')..WideChar('z')];
  ...
  if WS[1] in MY_SET then...

为什么会这样呢?

编辑:,我的问题是为什么 if WS[1] in [WideChar('A')..WideChar('Z')]编译?为什么MY_SET = [WideChar('A')..WideChar('Z'), WideChar('a')..WideChar('z')];会编译呢?它们不也需要适用于set规则吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-21 08:21:03

一个有效的集合必须遵守两个规则:

  1. 集合中的每个元素的序数值必须小于256。
  2. 集合不能有超过256个元素。

MY_SET: WideChar =WideChar(‘A’)..WideChar(‘Z’)的集合;

这里您声明了一个集类型 (Set of WideChar),它有超过256个元素的->编译器错误。

如果WS1 in WideChar('A')..WideChar('Z')

在这里,编译器将WideChar('A')看作序数值。此值和集合中的所有其他值都低于256。这符合第一条规则。

唯一元素的数量也在限制范围内(Ord('Z')-Ord('A')+1),因此第二个规则通过了。

MY_SET = WideChar('A')..WideChar('Z'),WideChar('a')..WideChar('z');

在这里,您声明了一个集,它也满足了上面的要求。注意,编译器认为这是一组序数值,而不是set of WideChar

票数 12
EN

Stack Overflow用户

发布于 2016-06-21 06:34:59

一个集合不能有超过256个元素。

即使只有这么少的元素,set也已经使用了32个字节。

从文件中:

集合是一个位数组,其中每个位指示一个元素是否在集合中。集合中的最大元素数为256个,因此集合所占的字节永远不会超过32个字节。由特定集合占用的字节数等于 (Max div 8) - (Min div 8) + 1

因此,只有一组字节、(Ansi)字符、布尔值和枚举(小于257个元素)是可能的。

因为widechar使用两个字节,所以它可以有65536个可能的值。

一组widechar将占用8Kb,太大而不实用。

代码语言:javascript
复制
type
  Capitals = 'A'..'Z';

const
  MY_SET: set of Capitals = [WideChar('A')..WideChar('Z')];

将编译和工作相同。

如果您的代码忽略unicode,那么使用widechar似乎有点傻。

由于只承认英文大写,所以不考虑不同的地区。

在这种情况下,最好使用以下代码

代码语言:javascript
复制
if (AWideChar >= 'A') and (AWideChar <= 'Z') ....

不管有多少个字符在中间,它都会起作用。

显然,您可以将其封装在一个函数中以保存输入。

如果您坚持使用大集合,请参见以下答案:https://stackoverflow.com/a/2281327/650492

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37936271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档