2

我想创建一个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在不久的将来使用。最好的方法是什么?

4

2 回答 2

2

您需要减少单词quarto_hashquarto_url

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

也不需要提取地图的话,直接在地图上选择应该会更快

我会用

if not select checksums quarto_hash [
    append checksums reduce [quarto_hash quarto_url ]
]
于 2015-06-30T12:23:57.397 回答
2

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

if not old [repend checksums [quarto_hash quarto_url]]

或者

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

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

关于map插入/搜索,您会更容易/更快地找到以下示例:

>> 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"
]
于 2015-06-30T12:25:00.700 回答