Tag: 数组

在Ruby中覆盖BigDecimal to_s默认值

当我从数据库表中检索数据时,会填充一个数组。 一些字段定义为十进制和货币字段,在数组中它们表示为BigDecimal。 我使用这些数组值来填充CSV文件,但问题是默认情况下所有BigDecimal值都以科学格式表示(这是BigDecimal to_s方法的默认行为)。 我可以使用to_s(’F’)显示值,但是如何覆盖默认值?

最长的公共前缀和数组后缀

获取两个数组的最长公共前缀(从原始索引0开始的子数组)和后缀(以原始索引-1结尾的子数组)的最佳方法是什么? 例如,给定两个数组: [:foo, 1, :foo, 0, nil, :bar, “baz”, false] [:foo, 1, :foo, 0, true, :bar, false] 这些数组的最长公共前缀是: [:foo, 1, :foo, 0] 并且这些数组的最长公共后缀是: [false] 当索引0 / -1处的元素在原始数组中不同时,公共前缀/后缀应该是空数组。

在Ruby中将哈希转换为字符串

假设我们有一个哈希: flash = {} flash[:error] = “This is an error.” flash[:info] = “This is an information.” 我想将其转换为字符串: “This is an error.This is an information”. 在漂亮的一个class轮;) 我找到了类似的东西: flash.to_a.collect{|item| “#{item[1]}”}.join 这解决了我的问题,但也许在哈希表类中有更好的解决方案?

随机项目的重量

例如,我有这些数据: headings = { :heading1 => { :weight => 60, :show_count => 0} :heading2 => { :weight => 10, :show_count => 0} :heading3 => { :weight => 20, :show_count => 0} :heading4 => { :weight => 10, :show_count => 0} } total_views = 0 现在我想根据他们的体重为每个标题服务。 例如,对于前10个请求/迭代, heading1 , heading3 , heading2和heading4将按顺序(按重量)分别提供heading4和1次。 对于每次迭代,服务标题的show_count将递增1,total_views也将全局递增。 你能建议一个算法或一些ruby代码来处理这个问题。

使用并行赋值交换数组元素

这个问题引起了我的兴趣,我用数组和方法调用进行了并行分配。 所以这是一个典范示例,试图通过它们的值交换数组中的两个成员: deck = [‘A’, ‘B’, ‘C’] #=> [“A”, “B”, “C”] deck[deck.index(“A”)], deck[deck.index(“B”)] = deck[deck.index(“B”)], deck[deck.index(“A”)] #=> [“B”, “A”] deck #=> [“A”, “B”, “C”] arrays没有改变。 但是如果我们改变参数的顺序,它就有效: deck[deck.index(“B”)], deck[deck.index(“A”)] = deck[deck.index(“A”)], deck[deck.index(“B”)] #=> [“A”, “B”] deck #=> [“B”, “A”, “C”] 我想它与在赋值中调用index方法的顺序有关,但是没有清楚地看到它。 有人可以解释下面的事情的顺序,以及为什么第一个例子没有交换成员,第二个例子呢?

如何在Ruby on Rails中将数组持久化到数据库?

我正在尝试将一个数组数组保存到我在Rails中的SQLite数据库。 现在,我有一个可以容纳这样一个数组的对象,实例看起来没有任何问题。 但是,它显然没有被持久化到数据库中 – 当我在My_Object.array上调用不同于创建数组的视图中的函数时,它出现了nil并且不起作用。 例如: class My_Object < ActiveRecord::Base attr_accessor :array end 当我调用My_Object.new(:array => [ [1, 2, 3], [4, 5, 6] ]) ,一切似乎都能正常工作,但我无法在其他地方访问:array属性,它结果是零。 有任何想法吗?

Ruby:在每个之间选择,map,inject,each_with_index和each_with_object

当我多年前开始编写Ruby时,我花了一些时间来理解每个和地图之间的区别。 当我发现所有其他Enumerable和Array方法时,情况会变得更糟。 在官方文档和许多 StackOverflow 问题的帮助下,我慢慢开始了解这些方法的作用。 以下是让我更长时间理解的内容: 我为什么要使用一种方法? 有没有指导方针? 我希望这个问题不是重复的:我对“为什么?”更感兴趣。 比“什么?” 或“如何?”,我认为它可以帮助Ruby新人。

访问由键数组指定的嵌套哈希元素

我试图获得一个通用的解决方案来解决在给定一组键值的情况下访问嵌套哈希中的元素的问题,例如: hash = { “a” => { “b” => ‘foo’ }} array = [“a”, “b”] function(array) => “foo” 我猜这可能是一个单行。 它也与这个问题密切相关: Ruby将数组转换为嵌套哈希

更快速地查看另一个字符串中是否包含大量字符串

我有一个存储在数组中的大约300k常用字的列表。 所以,数组的1个元素= 1个单词。 另一方面,我有一个庞大的字符串列表,其中可能包含其中一个或多个300k字。 示例字符串将是: ifdxawesome453 。 现在,我需要针对常用词检查每个长字符串。 如果在该字符串中找到单词,则立即返回。 所以,我需要再次检查300k字ifdxawesome453并查看其中是否包含任何字。 所以我做的是: huge_list_of_words.any? do |word| random_long_word.include?(word) end 虽然对于随机长词的小样本来说这是可以的,但如果我有数百万个,那么突然需要几个小时才能完成这项工作。 有没有办法更快地做到这一点? 我想到的唯一方法就是如果我抽样出来,说这些300k中最常见的10k字,并先与它进行比较,如果找不到匹配,则与完整列表进行比较。 另一种大幅加速的方法是按大小对300k字的数组进行分组。 当我然后将长随机字与它进行比较时,我首先检查单词的大小是否过滤掉任何更长的单词。 然后我留下相同大小或更少单词的索引,并从具有最小大小的单词开始搜索它们。

从数组中获取最大子数

我最近在测试中遇到了这个问题,并且完全不了解问题所要求的内容,特别是基于以下示例: max_subsum 编写一个方法max_subsum(numbers),它接受一个数组并返回具有最大总和的连续范围的起始和结束索引。 max_subsum([100,-101,200,-3,1000])== [2,4] max_subsum([1,2,3])== [0,2] 提示:遍历所有子arrays; 计算每个子arrays的总和,并与目前为止看到的最大子数进行比较。 子arrays由其起始索引和结束索引定义,因此遍历所有索引对。 你应该使用两个循环,一个嵌套在另一个循环中。 我在示例中没有看到任何子arrays。 示例的输出仅显示数组中最小值和最大值的索引。 如果这就是问题所要求的,那么子arrays的总和正在发生。 我必须遗漏一些简单的东西,我只是不知道那是什么。 别人看到了吗?