mappings
MudOS 0.9 �ṩ����Ϊ��ӳ�䡹����������. ӳ�������������е��������� (associative
arrays)�� һ�� (���� Perl). һ��������������ͨ����������, ���������������ʹ���κ���������
(�ַ��������������������ȵ�) ��Ϊ����(index) , ������ֻ��ʹ������. ����,
�������������ɵ����� (sparse arrays), Ҳ����˵, ������ָֻ���� 1,000,000��
��Ԫ�ص�����, ������ָ������Ԫ��.
ӳ��������ʵ�ʵ���;:
- 1)�� ���ݿ�
2)�� ���� C�� �ļ����������� struct. ֻ��Ҫ��ӳ���еĹؼ��� (key) ���� struct�� ����λ (field)�� ����.
- mapping x;
- x = ([�ؼ���һ : ����ֵһ, �ؼ��ֶ� : ����ֵ��,
...]);
��ע��һ��ӳ������ȳ�ʼ��, ����ָ�����е��κ�Ԫ��. �д���������Ϊ��Ϸ�����������еı�����ʼ��Ϊ 0 (���ܱ�����ʲô����).�� �����û�г�ʼ��һ��ӳ��, ��Ϊ������ָ��Ԫ��ʱ, �ͻῴ�� Indexing on illegal type�� (����ָ�����������Υ��) �Ĵ���.
�µ� (�ؼ���, ����ֵ) ���������µķ����ӽ�һ��ӳ��:
- x[key] = value;
ӳ���е�һ��Ԫ�ؿ������еķ�ʽ��ȡ:
- write(x[key] + "\n");
- map_delete(x, key);
- undefinedp(x[key])
- if (undefinedp(value = x["MudOS"])) {
- write("��MudOS��Ϊӳ�� x ��һ��Ԫ�ء�\n");
- write("�ؼ�ֵ��MudOS����ֵ�ǣ�" + value + "��\n");
���� mixed *idx;
���� map x;
���� x = ([ "x" : 3, "y" : 4]);
���� idx = keys(x);�������������� /* idx
== ({"x", "y"}) �� ({"y", "x"}) */
��ע��, ���������Ե�, keys()�� ����һ�������˳�� (random) �����������б� (���������˳��, ��ӳ�䴢�����ݵķ�ʽ�ĸ����� ---- �ڴ�, ����Ϊ������ʽ������Ѱ�� (extensible hash table)�� ˳��Ĺ�ϵ)
һ��ӳ�������ֵ (values) �б�, ���� values() �ⲿ�����г�:
- idx = values(x);
��(�ؼ���, ����ֵ) ��һ��ӳ����, �������� each()�� �ⲿ����������Ѱ. each()�� ���ҵ�ӳ���β��ʱ, �ͷ���һ�������� (null vector).�� each() ���� (�ؼ���, ����ֵ) ��˳��, �� keys() �� values()�� ���ص�˳����ͬ. ����:
- mixed *pair;
while ((pair = each(x)) != ({})) {
- write("key���� = " + pair[0] + "\n");
write("value = " + pair[1] + "\n");
��
- mapping x, y;
x = ([]);
y = ([]);
y["a"] = "c";
x["b"] = y;
- �� x["b"]["a"]�� == "c"
- ӳ��Ҳ������ *�� (�˷�) �������ϵõ� (��ѧ�ϵ����).
- mapping r1, r2, a;
r1 = ([]);
r2 = ([]);
r1["driver"] = "mudlib";
r2["mudlib"] = "castle";
- a = r1 * r2
��Ҳ���Խ�����ӳ�����. ����ӳ����ܺͶ���Ϊ����ӳ������� (union).
- a = r1 + r2
��+=��Ҳ��ʹ��. ������������:
- a += ([key : value]);
- a[key] = value;
ӳ�䲻��ʹ�� - (����) �������Ҫʹ�� map_delete() ��.
sizeof() �ⲿ���������ж�һ��ӳ�����ж��ٶ� (�ؼ���, ����ֵ)�� ������.
- write("ӳ�� x �ں� " + sizeof(x) + " ��Ԫ�ء�\n");
MudOS ��ӳ��ʹ�ÿ�����ʽ��������Ѱ�� (extensible hash table). ������Ѱ��Ĵ�Сһ���� 2�� �ij��� (power of 2).�� ��������Ѱ�������װ��һ���ij̶�ʱ, ������Ѱ��ľ���Ϊ������ά��������Ѱ��Ч��.
MudOS ��ӳ��ԭ���� Whiplash@TMI ��д. ���е�һ���ݺ����� Truilkan@TMI ��д��ʹ�ÿ�����ʽ��������Ѱ�����滻ԭ���Ķ�Ԫ�� (binary tree)��.
ӳ�����ݽṹ��һ�����ǻ��� Larry Wall д�� Perl �������Ե� hash.c ģ��.
Perl�� �����׳��������� GNU Copyleft general public license.