首页 / 知识
遍历Perl哈希键的最安全方法是什么?
2023-04-11 17:24:00

What's the safest way to iterate through the keys of a Perl hash?
如果我有一个带(键,值)对的Perl哈希,那么遍历所有键的首选方法是什么? 我听说使用
经验法则是使用最适合您需要的功能。 如果您只想要键,并且不打算读取任何值,请使用keys():
如果只需要这些值,请使用values():
如果需要键和值,请使用each():
如果打算以任何方式更改哈希键,但在迭代过程中删除当前键,则不得使用each()。例如,以下代码可以使用keys()来创建一组新的具有双倍值的大写键:
产生预期的结果哈希:
但是使用each()做同样的事情:
以难以预测的方式产生错误的结果。例如:
但是,这是安全的:
所有这些都在perl文档中进行了描述:
使用
在这种情况下,哈希将记住它已经返回了哪些键,并且 例:
打印:
" bar"和" baz"键发生了什么?它们仍然存在,但是
如果需要确保 使用每种语法将防止立即生成整个键集。如果您要对具有数百万行的数据库使用绑定的哈希,这可能很重要。您不想一次全部生成整个键列表并耗尽您的物理内存。在这种情况下,每个都充当迭代器,而键实际上在循环开始之前就生成了整个数组。 因此,"每个"唯一实际使用的地方是散列很大(与可用内存相比)。只有当哈希本身不存在于内存中时,才可能发生这种情况,除非您正在为手持式数据收集设备或内存较小的设备编程。 如果内存不是问题,则通常映射或键范式更为流行,更易于阅读。 关于此主题的一些其他想法: 我也总是使用方法2。使用每种方法的唯一好处是,如果您只是读取(而不是重新分配)哈希条目的值,那么您就不会经常取消引用哈希。 我可能会对此一口咬,但我认为这是个人喜好。我找不到文档中对each()的引用不同于keys()或values()的引用(除了显而易见的"它们返回不同的事物"的答案。事实上,文档声明使用相同的迭代器,并且它们都返回实际的列表值,而不是它们的副本,并且在使用任何调用对其进行迭代时修改哈希值是不好的。 话虽如此,我几乎总是使用keys(),因为对我而言,通常是更多自我记录,可通过散列本身访问键的值。当值是对大型结构的引用且哈希键已存储在结构中时,我有时会使用values(),此时该键是多余的,不需要。我想我在Perl编程的10年中两次使用了each()2次,两次可能都是错误的选择=)
我通常使用
不要忘记
我会说: 这具有两个主要优点: 我认为在每个键上使用键并不昂贵,因此无需为代码中的同一事物使用两个不同的结构。 |
最新内容
相关内容
python怎么调用类方法
python怎么调用类方法,培训,方法,实例,静态,定义,参数,属性,对象,关键字,以上,python中的类用来描述具有相同的属性和方法的对象的集合。它定python判断字符串是否为小数的方法
python判断字符串是否为小数的方法,培训,代码,合法,小数点,小数,整数,字符串,方法,右边,左边,python想判断一个字符串是不是一个合法的小数,但python可以继承父类方法吗
python可以继承父类方法吗,培训,代码,名字,方法,动物,属性,编译器,这样的话,定义,里面,python继承,调用父类属性方法在python里面,继承一个类python函数的高级使用方法
python函数的高级使用方法,代码,函数,灵活,数据,培训,时间,定义,程序,赋值,变量,Python的函数是“一等公民”,因此函数本身也是一个对象,函数既python如何遍历dict
python如何遍历dict,培训,字典,以上,以下,方式,更多,内容,python遍历字典有以下几种方式我们先创建一个字典D={‘a’:1,‘b’:2,’b‘:3,’d‘:4}python私有方法是什么
python私有方法是什么,培训,公开,代码,方法,属性,变量,函数,前面,成员,法名,Python默认的成员函数和成员变量都是公开的,Python私有属性和方法python字符串连接的方法有哪些
python字符串连接的方法有哪些,培训,字符串,基础,方式,两个,变量,函数,空白,语言,功能,python中有很多字符串连接方式,下面总结一下:最原始的字python字符串拼接有哪些方法?
python字符串拼接有哪些方法?,培训,一致,字符串,位置,异常,结果,方式,方法,字符,参数,python拼接字符串一般有以下几种方法:①直接通过(+)操作python创建多线程的两种方法
python创建多线程的两种方法,培训,第一,代码,业务,方法,线程,函数,任务,演示,实例,当我们使用python编程的过程中需要多个输出的任务的话,为了python实例方法的使用注意
python实例方法的使用注意,培训,实例,方法,对象,定义,以上,参数,更多,内容,python实例方法的使用注意1、实例方法是从属于实例对象的方法,定python类方法的注意点
python类方法的注意点,培训,国际,方法,实例,对象,属性,参数,法名,性别,上面,python类方法的注意点1、@classmethod必须在方法上面。2、第一个pythonTKinter的绑定方法
pythonTKinter的绑定方法,培训,方法,全局,实例,参数,事件,快捷键,以上,操作,更多,python中TKinter的绑定方法1、bind_all全局绑定,默认是全局