Allocate mapping

来自MudWiki

名称

   allocate_mapping() - 为一个映射(mapping)变量预分空间

语法

   mapping allocate_mapping(int size);
   mapping allocate_mapping(mixed *key, mixed value);

描述

   返回一个预分配了 `size` 个元素的映射变量,`size`大于等于0。

   示例:
   mapping x;
   int y = 200;
   x = allocate_mapping(y);

   示例中 y 是映射 x 的初始大小。如果你已经确定映射有多少个元素,使用 allocate_mapping 初始化变量是首选方式。因为这样一次性分配所有空间的内存利用效率更高。如果你要使用映射存储 200 项资料,使用示例初始化是相当适合的。注意,以上示例并不代表只能存储 200 项资料,只是前 200 项资料能更有效的存储。

   如果你需要从映射中删除大量的元素,使用 x = ([]) 来初始化映射比使用 allocate_mapping() 更好。因为在这种情况下 `size` 是无意义的, x= allocate_mapping(200); 的效果等于 x =([ ]);

   allocate_mapping(array keys, mixed v):
     - if v is an array, the returned array has keys 'keys' and values 'v' (like 3.2.x's mkmapping)
     - if it is a function, the the mapping has keys 'keys' and values evaluate(v, key)
     - otherwise, each key has the value 'v'

示例

allocate_mapping(0);
// ([ ])

allocate_mapping(25);
// ([ ])

allocate_mapping( ({ 1, 2, 3 }), ({ "one", "two", "three" }) );
// ([ 1 : "one", 2 : "two", 3 : "three" ])

allocate_mapping( users(), (: $1->query_name() :));
// ([
//     OBJ(karahd /std/user#9) : "Karahd",
//     OBJ(gesslar /std/user#2) : "Gesslar"
// ])

allocate_mapping( ({ "apple", "banana", "pear" }), 25);
// ([ "pear" : 25, "apple" : 25, "banana" : 25 ])

参考

   map_delete(3), allocate(3)

翻译

   雪风(i@mud.ren)