我可以更快地制作这个Ruby代码和/或使用更少的内存吗?
发布时间:2020-12-17 03:49:22 所属栏目:百科 来源:网络整理
导读:我在 Ruby中有一个String对象数组,它由下面的单词组成: 动物= [“猫马”,“狗”,“猫狗”,“狗羊”,“鸡牛”] 我想将它转换为另一个String对象数组,但每个元素只有一个动物,只有唯一的元素.我找到了一种方法,如下所示: class Array def process() self.joi
我在
Ruby中有一个String对象数组,它由下面的单词组成:
动物= [“猫马”,“狗”,“猫狗”,“狗羊”,“鸡牛”] 我想将它转换为另一个String对象数组,但每个元素只有一个动物,只有唯一的元素.我找到了一种方法,如下所示: class Array def process() self.join(" ").split().uniq end end 但是,如果输入数组是巨大的,让我们说数百万个条目然后执行这将是非常糟糕的因为我将创建一个巨大的字符串,然后一个巨大的数组然后uniq必须处理该巨大的数组以删除重复的元素.我想要加快速度的一种方法是创建一个带有每个单词条目的哈希,这样我只会在第一遍中处理每个单词一次.有没有更好的办法? 解决方法
你有正确的想法.但是,Ruby有一个内置类,非常适合构建一组独特的项目:
Set.
animals = ["cat horse","dog","cat dog bird","dog sheep","chicken cow"] unique_animals = Set.new animals.each do |str| unique_animals.merge(str.split) end # => cat # horse # dog # bird # sheep # chicken # cow 要么… unique_animals = animals.reduce(Set.new) do |set,str| set.merge(str.split) end 在封面设置actually uses a Hash以存储其项目,但它更像是一个无序的数组,并响应所有熟悉的Enumerable方法(每个,地图,选择等).但是,如果您需要将其转换为真正的数组,请使用Set#to_a. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 5、cocos2d-Lua的demo--虫子和虫子精灵
- ORACLE日期时间函数大全
- c – 为什么std :: make_tuple将std :: reference_wrapper参
- 向oracle的blob字段导入文件
- ruby-on-rails – Rails – 使用Ajax更新div并且:remote =
- Nand Flash ECC校验简介
- iphone – Xcode:为不同的构建配置设置GCC_PREPROCESSOR_D
- c – constexpr和已弃用的转换警告
- React 的数据载体:state、props、context
- ios – 使用自定义视图不工作为UIBarButtonItem添加目标