我想创建一个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_hash
和quarto_url
字词未转换为其值。
这可能不是问题的最简单方法,所以我会等你的输入。
另一个问题:map
是否能够快速解决数千个元素的元素插入和搜索问题,还是有其他更合适的类型?
仅供参考,我正在使用Rebol3
,但也包含Red
标记,因为我也将在短期内使用Red
。
对此最好的方法是什么?
答案 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_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"
]