Tag: 数组

Ruby数组删除if和get delete对象

所以我有这种情况,我需要有条件地从数组中删除一些东西,这意味着我想要遍历数组中的项目并进行测试并删除通过测试的那个,然后我想要删除该项目背部。 如果我排除了这个条件方面,那么Array#delete基本上做了我想要的 – 返回已删除的项目,但不能有条件地删除。 另一方面,delete_if有条件地删除该项,但返回数组中的其余项。 出于此问题的目的,假设以下类: class Foo def test? #returns true or false end end 我可以通过以下方式轻松重现此行为: index = my_array.index {|a| a.test?} item_to_delete = my_array[index] my_array.delete item_to_delete 但我希望找到类似的东西: deleted_item = my_array.delete_if_and_return_deleted {|a| a.test?} 我不是很高兴不得不多次完成数组才能完成这个任务:/首先找到目标的索引,第二个找到目标,第三个去除目标。 伊克。 有什么想法或建议吗?

使用JSON将哈希数组写入文件?

目前我这样做: badLinks = Array.new badLinksFile = File.new(arrayFilePath + ‘badLinks.txt’, ‘w+’) badLinksFile.puts badLinks.to_json 数组badLinks包含哈希值,它是: brokenLink = Hash.new brokenLink[:onPage] = @lastPage brokenLink[:link] = @nextPage badLinks.push(brokenLink) 当我查看文件时它是空的。 这有用吗?

从Jekyll插件返回目录中的文件列表?

我无法弄清楚如何在jekyll插件中创建filter或标记,以便我可以返回一个目录并循环其内容。 我找到了这些: http://pastebin.com/LRfMVN5Y http://snippets.dzone.com/posts/show/302 到目前为止我有: module Jekyll class FilesTag < Liquid::Tag def initialize(tag_name, text, tokens) super @text = text end def render(context) #"#{@text} #{Time.now}" Dir.glob("images/*").each { |i| "#{i}" } #Dir.glob("images/*") #Hash[*Dir.glob("images/*").collect { |v| [v, v*2] }.flatten] end end end Liquid::Template.register_tag('files', Jekyll::FilesTag) 我可以成功地将图像列表作为字符串返回并打印出来: {% files test_string %} 但是对于我的生活,无论我如何从Dir.glob返回数组/哈希,我都无法遍历数组。 我只是希望能够做到: {% for image in files %} image […]

我可以检查数组是否只是在ruby中保存整数?

标题,我认为是自我宣告。 我是一个java开发人员,并希望确保我的数组只包含整数值。 我知道ruby中的一切都是一个对象。 我发现循环遍历数组并检查每个元素是不方便的。 ruby有什么捷径吗?

使用Mongoid,我可以“update_all”一次将值推送到多个条目的数组字段吗?

使用Mongoid,是否可以使用“update_all”将值推送到符合特定条件的所有条目的数组字段? 例: class Foo field :username field :bar, :type => Array def update_all_bars array_of_names = [‘foo’,’bar’,’baz’] Foo.any_in(username: foo).each do |f| f.push(:bar,’my_new_val’) end end end 我想知道是否有办法立即更新所有用户(将值’my_new_val’推送到每个匹配条目的“foo”字段)使用“update_all”(或类似的东西)而不是循环通过它们来更新他们一次一个。 我已经尝试了所有我能想到的东西,到目前为止还没有运气。 谢谢

在迭代时添加到数组

为什么这段代码’锁定’ruby? 什么是超越它的最佳方式? 我在下面发布了解决方案。 还有另一种方法吗? 提前致谢! 码: nums = [1, 2, 3] nums.each { |i| nums << i + 1 } 我的解决方案 nums = [1, 2, 3] adjustments = [] nums.each { |i| adjustments << i + 1 } nums += adjustments

ruby:如何有效地迭代哈希中的元素

我有一个非常大的哈希,我想迭代它。 Hash.each似乎太慢了。 有没有有效的方法来做到这一点? 如何将此哈希转换为数组? 在每个循环中,我正在做非常简单的字符串: name_hash.each {|name, str| record += name.to_s + “\|” + str +”\n” } 并且哈希使用人名作为键,一些相关内容作为值: name_hash = {:”jose garcia” => “ca:tw#2@1,2@:th#1@3@;ar:tw#1@4@:fi#1@5@;ny:tw#1@6@;”}

Ruby数组上未定义的方法’to_h’

根据Ruby Array文档 ,只要数组的每个元素是另外两个元素的数组,就有一个方法to_h可用于将数组转换为哈希。 以下示例来自相同的文档 p [[:foo, :bar], [1, 2]].to_h 但是,当我运行上面的代码时,我收到此错误: irb(main):001:0> p [[:foo, :bar], [1, 2]].to_h NoMethodError: undefined method `to_h’ for [[:foo, :bar], [1, 2]]:Array from (irb):1 from E:/RubyInstall/bin/irb:12:in `’ irb(main):002:0> 我的Ruby版本是 C:\>ruby -v ruby 2.0.0p247 (2013-06-27) [x64-mingw32] 我想使用这种技术来回答Stackoverflow上的另一个问题,但是现在我被困住了,因为Ruby的文档function对我不起作用。

重现随机数组排序

我有一个对象数组,我想随机排序。 对于这种情况,我可以使用array.shuffle 。 但是,如果我想稍后在同一arrays上重现该命令呢? 有什么方法可以提供种子,随机数,等等,以便我可以在以后重现这个序列吗? 我想从MongoDB数据库生成一个随机的对象列表(使用MongoID),该列表必须在以后再现。 但据我所知,在MongoDB中直接实现随机排序并没有什么好办法。 可能有很多对象(> 1,000,000),但计算时间是第一次尝试而不是重要的事实。

Swift相当于Ruby的“each_cons”

ruby Ruby有each_cons可以像这样使用 class Pair def initialize(left, right) @left = left @right = right end end votes = [“a”, “b”, “c”, “d”] pairs = votes.each_cons(2).map { |vote| Pair.new(*vote) } p pairs # [#, #, #] 迅速 swift中的代码相同,但没有each_cons函数 struct Pair { let left: String let right: String } let votes = [“a”, “b”, “c”, “d”] var pairs […]