请考虑以下代码:
hash1 = {"one" => 1, "two" => 2, "three" => 3}
hash2 = hash1.reduce({}){ |h, (k,v)| h.merge(k => hash1) }
hash3 = hash2.reduce({}){ |h, (k,v)| h.merge(k => hash2) }
hash4 = hash3.reduce({}){ |h, (k,v)| h.merge(k => hash3) }
Run Code Online (Sandbox Code Playgroud)
hash4是一个'嵌套'哈希,即带有字符串键的散列和类似的'嵌套'哈希值.
Hails in Rails的'symbolize_keys'方法让我们可以轻松地将字符串键转换为符号.但我正在寻找一种优雅的方法将所有键(主键加上hash4中所有哈希的键)转换为符号.
重点是从我的(imo)丑陋的解决方案中解脱出来:
class Hash
def symbolize_keys_and_hash_values
symbolize_keys.reduce({}) do |h, (k,v)|
new_val = v.is_a?(Hash) ? v.symbolize_keys_and_hash_values : v
h.merge({k => new_val})
end
end
end
hash4.symbolize_keys_and_hash_values #=> desired result
Run Code Online (Sandbox Code Playgroud)
仅供参考:安装程序是Rails 3.2.17和Ruby 2.1.1
更新:
答案是 …
我有这个文本块:
XQuery programming language
C# programming language
declarative programming
XSLT programming language
Haskell programming language vs F* programming language
Run Code Online (Sandbox Code Playgroud)
我想检索编程语言的名称.
我试过类似的东西
matches = string.scan('/(\w)*\sprogramming language/i')
Run Code Online (Sandbox Code Playgroud)
但这给了我这个:
[]
[]
[]
[]
Run Code Online (Sandbox Code Playgroud)
虽然我想要一个像这样的数组:
['XQuerye','C#','XSLT','Haskell']
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一节课:
class ApiParser
def initialize
..
end
def api_data
# returns an array of hashes like so:
# [{ answer: "yes", name: "steve b" age: 22, hometown: "chicago", ... },
# { answer:"unsure", name: "tom z", age: 44, hometown: "baltimore" , ... },
# { answer: "no", name: "the brah", age: nil, hometown: "SF", ... },
# { ... }, { ... }, ... ]
end
end
Run Code Online (Sandbox Code Playgroud)
该方法返回一个哈希数组.数组的长度为50个元素.
每个哈希都具有完全相同的密钥.大约有20把钥匙.
我不确定什么是单元测试这种方法的最佳方法.如何确定该方法确实返回一个数组,每个哈希具有这些键?一些哈希值可能是零,所以我不认为我会测试这些值.
我的数据库中有一个Hotels表,其中一列是:status(integer).我期待将这些整数转换成字符串,所以1 = "Awaiting Contract",2 = "Designing"等等...
我已经搜索了Stack的一些答案,而缺少它们让我觉得我是从错误的角度来解决这个问题的?我以前在PHP中执行此操作同时提取数据.对Rails有新意见,所以我们非常感谢任何帮助或最佳实践建议.
我有一个单例类,许多其他类和控制器可以访问该类来确定行为。如何在测试中设置单例值以便测试行为。下面的示例代码中,Setting 是一个 Singleton 类,它由数据库支持并存储应用程序范围的设置,并且管理员可以更改这些设置。Floodgate 是访问设置的类。
class Setting
def instance
@setting ||= new
end
end
class Floodgate
def self.whitelist
Setting.instance.flood_gate_whitelist
end
end
Run Code Online (Sandbox Code Playgroud)
以下是 Floodgate 的一些测试,需要访问设置数据库值。
describe Floodgate do
let(:setting) { Class.create(Setting).instance }
describe ".whitelist" do
it "returns a list of values on the Settings floodgate whitelist" do
expect(Floodgate.whitelist).to eq 'google'
end
end
describe ".allow_traffic_source?" do
it "returns true if traffic source is on the white list" do
expect(Floodgate.allow_traffic_source?('google')).to eq true
end
it "returns false if traffic source is not on the …Run Code Online (Sandbox Code Playgroud)