我正在学习 XQuery 和 MarkLogic。我遇到过一张地图,它似乎就像其他语言中的哈希,但似乎您只需使用结构化语言的内置功能即可完成您需要的操作。
与结构化语言相比,map:map() 有什么好处吗?
谢谢!
我主要看到两个原因:
地图已添加到 XSLT 3.0 工作草案中,并且一些 XQuery 供应商已经开始在将它们包含在 XQuery 语言中之前实现它们。
需要它们的原因有很多。XML 元素不能包含任意值:例如,XML 元素的属性不能是文档或元素节点,或者包含一个字符串后跟两个整数的序列,或者一个函数。此外,由于 XML 节点具有身份和父信息,因此复制它们是一项昂贵的操作,并且(除了在 XQuery 更新的有限范围内)您不能在不复制整个内容的情况下修改 XML 树。相比之下,即使使用非可变映射,使用 delta 也可以非常便宜地制作修改后的副本。
顺便说一句,地图有大量不同语言的不同名称。术语“hash”、“dictionary”、“associative array”、“object”都会遇到。“地图”一词似乎是现代函数式语言中最常见的一个。“哈希”强烈建议实现,建议必须将映射实现为哈希表是错误的。其他数据结构,如红黑树或手指树可能更合适。