我认为我正在处理一个json文件。但无论如何,我正在处理许多不同的哈希并获取不同的值等等。这是
{"notification_rule"=>
{"id"=>"0000000",
"contact_method"=>
{"id"=>"000000",
"address"=>"cod.lew@gmail.com",}
{"notification_rule"=>
{"id"=>"000000"
"contact_method"=>
{"id"=>"PO0JGV7",
"address"=>"cod.lew@gmail.com",}
基本的,这是我正在使用的哈希类型。用我的代码:
我想在文本文件中停止重复同样的事情。因为每当我运行此代码时,它都会带来这两个哈希的address
。我理解为什么,因为它再次循环,但我认为我添加的这段代码将有助于解决这个问题:
最终更新
if jdoc["notification_rule"]["contact_method"]["address"].to_s.include?(".com")
numbers.print "Employee Name: "
numbers.puts jdoc["notification_rule"]["contact_method"]["address"].gsub(/@target.com/, '').gsub(/\w+/, &:capitalize)
file_names = ['Employee_Information.txt']
file_names.each do |file_name|
text = File.read(file_name)
lines = text.split("\n")
new_contents = lines.uniq.join("\n")
File.open(file_name, "w") { |file| file.puts new_contents }
end
else
nil
end
答案 0 :(得分:0)
这段代码看起来很混乱,缺乏特定的目的。一般来说,这种纠结的Ruby是在错误的轨道上,就像Ruby一样,通常是一种表达简单的简单方法,并且测试重复的地址是不应该做的事情之一。硬。
最大的混淆之一是一大块代码的责任。在该示例中,您不仅要尝试导入数据,循环文档,清理电子邮件地址以及测试重复项,还要以某种方式帮助打印出结果。这是很多事情同时发生的事情,他们都必须完美地工作才能完全运行这一大块代码。没有办法让它部分工作,也无法知道你是否在正确的轨道上。
始终尝试将复杂问题分解为几个简单的阶段,然后根据需要将这些阶段链接在一起。
以下是如何定义清理电子邮件地址的方法:
def address_scrub(address)
address.gsub(/\@target.com/, '').gsub(/\w+/, &:capitalize)
end
可以根据需要对其进行调整,并且可能测试以确保其正常工作,您现在可以独立于其他代码进行操作。
至于其余的,它看起来像这样:
require 'set'
# Read in duplicated addresses from a file, clean up with chomp, using a Set
# for fast lookups.
duplicates = Set.new(
File.open("Employee_Information.txt", "r").readlines.map(&:chomp)
)
# Extract addresses from jdoc document array
filtered = jdocs.map do |jdoc|
# Convert to jdoc/address pair
[ jdoc, address_scrub(jdoc["notification_rule"]["contact_method"]["address"]) ]
end.reject do |jdoc, address|
# Remove any that are already in the duplicates list
duplicates.include?(address)
end.map do |jdoc, _|
# Return only the document
jdoc
end
在哪里处理jdocs
,jdoc
结构数组,并通过一系列简单步骤删除重复项。
使用链接方法,您可以在添加下一个"链接"之前看到发生了什么,这样您就可以逐步实现解决方案,随时调整。任何错误都很容易被捕获,因为您可以随时检查这些阶段的中间产品。