添加到解析方言内的地图

时间:2015-06-30 10:44:48

标签: rebol rebol3 red

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

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。 对此最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

你需要减少单词 quarto_hash quarto_url

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

也没有必要提取地图的文字,你应该在地图上直接选择更快

我会用

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

答案 1 :(得分:2)

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

if not old [repend checksums [quarto_hash quarto_url]]

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

现在,您会发现在添加到quarto_hash(哈希)地图之前会对quarto_urlchecksums进行评估。

关于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"
]