社区首页 >问答首页 >用散列键检查字符串

用散列键检查字符串
EN

Stack Overflow用户
提问于 2015-08-06 14:13:14
回答 3查看 912关注 0票数 0

我正在使用Ruby1.9。

我有个哈希:

代码语言:javascript
代码运行次数:0
复制
Hash_List={"ruby"=>"fun to learn","the rails"=>"It is a framework"}

我有一根这样的绳子:

代码语言:javascript
代码运行次数:0
复制
test_string="I am learning the ruby by myself and also the rails."

我需要检查test_string是否包含与Hash_List键匹配的单词。如果是的话,用匹配的哈希值替换单词。

我使用了这段代码来检查,但是它返回的是空的:

代码语言:javascript
代码运行次数:0
复制
another_hash=Hash_List.select{|key,value| key.include? test_string}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-06 17:09:45

好,拿着你的帽子:

代码语言:javascript
代码运行次数:0
复制
HASH_LIST = {
  "ruby" => "fun to learn",
  "the rails" => "It is a framework"
}

test_string = "I am learning the ruby by myself and also the rails."

keys_regex = /\b (?:#{Regexp.union(HASH_LIST.keys).source}) \b/x # => /\b (?:ruby|the\ rails) \b/x
test_string.gsub(keys_regex, HASH_LIST) # => "I am learning the fun to learn by myself and also It is a framework."

Ruby有一些很棒的技巧,其中之一就是我们可以在gsub上抛出正则表达式和散列,它将搜索正则表达式的每一个匹配项,查找匹配的"hits“作为哈希键,并将值替换回字符串中:

代码语言:javascript
代码运行次数:0
复制
gsub(pattern, hash) → new_str

...If第二个参数是哈希,匹配的文本是它的键之一,对应的值是替换字符串.

代码语言:javascript
代码运行次数:0
复制
Regexp.union(HASH_LIST.keys) # => /ruby|the\ rails/
Regexp.union(HASH_LIST.keys).source # => "ruby|the\\ rails"

注意,第一个返回正则表达式,第二个返回一个字符串。当我们将它们嵌入到另一个正则表达式中时,这一点很重要:

代码语言:javascript
代码运行次数:0
复制
/#{Regexp.union(HASH_LIST.keys)}/ # => /(?-mix:ruby|the\ rails)/
/#{Regexp.union(HASH_LIST.keys).source}/ # => /ruby|the\ rails/

第一个可以悄悄地破坏您认为是一个简单的搜索,因为?-mix:标志最终会在模式中嵌入不同的标志。

Regexp文档很好地涵盖了这一切。

这个功能是在Ruby中制作一个非常高速的模板程序的核心。

票数 1
EN

Stack Overflow用户

发布于 2015-08-06 14:25:54

首先,遵循命名约定。变量是snake_case,类的名称是CamelCase

代码语言:javascript
代码运行次数:0
复制
hash = {"ruby" => "fun to learn", "rails" => "It is a framework"}
words = test_string.split(' ') # => ["I", "am", "learning", ...]
another_hash = hash.select{|key,value| words.include?(key)}

回答您的问题:用#split将测试字符串拆分成单词,然后检查单词是否包含密钥。

要检查该字符串是否是另一个字符串的子字符串,请使用String#[String]方法:

代码语言:javascript
代码运行次数:0
复制
another_hash = hash.select{|key, value| test_string[key]}
票数 0
EN

Stack Overflow用户

发布于 2015-08-06 15:00:41

你可以这样做:

代码语言:javascript
代码运行次数:0
复制
Hash_List.each_with_object(test_string.dup) { |(k,v),s| s.sub!(/#{k}/, v) } 
 #=> "I am learning the fun to learn by myself and also It is a framework."
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31866688

复制
相关文章
散列/散列函数「建议收藏」
每个关键字被映射到从0-TableSize-1这个范围中的某个数,并且被放到适当的单元中。这种映射就叫做散列函数
全栈程序员站长
2022/08/28
8920
散列/散列函数「建议收藏」
散列算法与散列码
一、引入 1 /** 2 * Description:新建一个类作为map的key 3 */ 4 public class Groundhog 5 { 6 protected int number; 7 8 public Groundhog(){ 9 } 10 public Groundhog(int number) 11 { 12 this.number = number; 13 } 14 15 @Overr
JMCui
2018/03/15
1.5K0
散列算法与散列码
散列
将一个元素的关键码和存储位置之间建立对应的函数关系 Hash( ), 使得每个关键码与结构中的唯一的存储位置相对应:
Rikka
2022/02/07
1.8K0
散列
选择键值,冲突的时候采取不同的策略 散列函数: 简单的散列函数: 1 int hash(const string & key,int tableSize) 2 { 3 int hashVal = 0; 4 for(int i = 0; i < key.length();++i) 5 { 6 hashVal + = key[i]; 7 } 8 return hashVal % tableSize; 9 } 比较好的散列函数: 1 int hash( c
用户1154259
2018/01/17
8140
分离链接的散列散列代码实现
散列 散列为一种用于以常数平均时间执行插入,删除和查找的技术。一般的实现方法是使通过数据的关键字可以计算出该数据所在散列中的位置,类似于Python中的字典。关于散列需要解决以下问题: 散列的关键字如何映射为一个数(索引)——散列函数 当两个关键字的散列函数结果相同时,如何解决——冲突 散列函数 散列函数为关键字->索引的函数,常用的关键字为字符串,则需要一个字符串->整数的映射关系,常见的三种散列函数为: ASCII码累加(简单) 计算前三个字符的加权和$\sum key[i] * 27^{i}$ (不太
月见樽
2018/04/27
1.5K0
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
8990
散列冲突
概念:如果当一个元素被插入时与一个已经插入的元素散列到相同的值, 那么就会产生冲突, 这个冲突需要消除。解决这种冲突的方法有几种:本章介绍两种方法:分离链接法和开放定址法
全栈程序员站长
2022/08/27
5950
Hash散列[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146553.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/27
6720
散列函数
散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。
233333
2019/09/24
9200
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.2K0
散列查找
浅谈散列运算
“指纹”一词形象地描述了散列运算的结果。在现实生活中,两个人可能长得很像,但是他们的指纹不同,根据指纹就能对这两个人进行区分。
小蜜蜂
2019/07/24
1.1K0
浅谈散列运算
Hash(散列)冲突解决 线性探测再散列和二次探测再散列
例如  哈希函数为: H(key) =  key %13,key 为关键字,采用开放地址法中的线性探测再散列解决冲突,依次输入
用户2965768
2018/12/28
16.6K0
查找-散列查找
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。
全栈程序员站长
2022/08/28
1.4K0
查找-散列查找
hash散列 introduction
hash散列是在记录的存储位置与他的关键字之间建立的对应关系f, 使得每个key都对应一个存储位置, 查找时根据key的hash去查找.
CoffeeLand
2020/03/26
5390
单向散列函数
如果你需要从国外的网站上下载一个软件,但是因为种种原因,国外的网络太慢了,下载几个G的数据几乎是不可能的。刚好国内有镜像网站,可以从国内下载数据。但是如何保证国内的镜像不是被篡改过后的呢?这个时候就需要单向散列函数了。一般来说网站会提供MD5或者SHA的值作为验证值。
程序那些事
2020/07/08
7940
线性探测再散列
哈希表又称散列表。哈希表存储的基本思想是:以数据表中的每个记录的关键字 k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H为哈函数或散列函数。按这种方法建立的表称为哈希表或散列表。
全栈程序员站长
2022/08/28
5220
散列表(一):散列表概念、 散列函数构造方法、 常见字符串哈希函数(测试冲突)
一、散列表基本概念 1、散列表(hash table) ,也叫哈希表,是根据关键码而直接进行访问的数据结构。也就是说,它通过把关键码映射到表中一个位置 来访问记录,以加快查找的速度。这个映射函数叫做散
s1mba
2017/12/28
2.1K0
散列表(一):散列表概念、 散列函数构造方法、 常见字符串哈希函数(测试冲突)
哈希函数/散列算法
哈希函数(Hash function),又称散列函数、散列算法,它是一种不可逆的信息摘要算法,具体实现就是把任意长度的输入信息通过哈希算法变成固定长度的输出信息。
arnodev
2022/10/20
8970
散列函数(哈希)(转)
Hash一般翻译作散列也有直接音译作“哈希”。就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
Oceanlong
2018/12/28
9200
Golang与散列算法
散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。常用于保证数据完整性
仙人技术
2021/12/17
1.1K0
Golang与散列算法

相似问题

用符号键和字符串键引用散列元素

30

用多个键/值合并散列

23

使用restTemplate检查redis键是散列还是字符串

12

检查散列映射与在散列图中迭代键的区别

22

对散列映射键的空检查

62
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文