2015-06-30 4 views
2

Я хочу создать map, где хеш связан с URL-адресом, чтобы проверить, есть ли какой-либо URL-адрес или нет в map. Если его еще нет в map, добавьте его (и ссылку) на него.Добавить в карту внутри диалекта parse

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, способный быстро вставлять и находить элементы для тысяч элементов, или есть ли другой более подходящий тип?

FYI, я использую Rebol3, но также добавил тег Red, потому что я также буду использовать Red в короткое будущее. Каков наилучший подход для этого?

ответ

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 ] 
] 
2

Вам нужно сделать один из followi нг:

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" 
] 
+0

Интересного синтаксиса 'контрольных сумм /: кварто-хэш: кварто-url', но не работаете в моем 3.0. 0,4.40 переводчик Rebol 3. – Luis

+0

Привет @Luis. В приведенных выше примерах используется синтаксис [путь!] (Http://www.rebol.com/r3/docs/datatypes/path.html), и это использование было разработано специально для Rebol 3 (они были введены дословно в консоль Rebol и скопировать/вставить в ответ). Какие ошибки вы получили? – draegtun

+0

Извините, попробовал еще раз в новой консоли, и это сработало :-) Большое спасибо за ваше объяснение! – Luis

Смежные вопросы