添加到解析方言内部的地图

Add to map inside of parse dialect

我想创建一个 map,其中哈希与 url 相关联,以便检查某些 url 是否在 map 中。 如果它还不在 map 中,请将它(和 url)添加到它。

parseContainer: func [cstr [string!]] [
    parse cstr [
        thru "<a href=" to {"}
        thru "http://" copy quarto_url to {"}
        (
            quarto_hash: checksum/method to-binary quarto_url 'md5
            old: find words-of checksums 'quarto_hash
            if not old [append checksums [quarto_hash quarto_url ]]
        )
    ]
]

但是单词 quarto_hashquarto_url 没有转换成它们的值。 这可能不是解决问题的最简单方法,所以我会等待您的输入。 另一个问题:map 是否可以快速解决数千个元素的元素插入和搜索问题,或者是否有其他更合适的类型?

仅供参考,我使用的是 Rebol3,但也包含了 Red 标签,因为我在不久的将来也会使用 Red。 最好的方法是什么?

你需要减少quarto_hashquarto_url

这两个词
if not old [append checksums reduce [quarto_hash quarto_url ]]

也不需要提取图的话,直接在图上用select应该会更快

我会用

if not select checksums quarto_hash [
    append checksums reduce [quarto_hash quarto_url ]
]

您需要执行以下操作之一:

if not old [repend checksums [quarto_hash quarto_url]]

if not old [append checksums reduce [quarto_hash quarto_url]]

您现在会发现 quarto_hashquarto_url 在添加到 checksums(散列)映射之前被评估。

关于 map insertion/searching 你会在下面找到例子 easier/faster:

>> checksums: map []
== make map! [
]

>> quarto-url: "www.draegtun.com"
== "www.draegtun.com"

>> quarto-hash: checksum/method to-binary quarto-url 'md5
== #{D9F71DD455C3E84E7C5C8F2C23FDF174}

>> checksums/:quarto-hash
== none

>> ;;  returns NONE if key not present in map

>> checksums/:quarto-hash: quarto-url    
== "www.draegtun.com"

>> checksums
== make map! [
    #{D9F71DD455C3E84E7C5C8F2C23FDF174} "www.draegtun.com"
]