gpt4 book ai didi

用于创建数组数组的 Ruby 脚本

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:51 25 4
gpt4 key购买 nike

我编写了一个简单的屏幕抓取脚本,在脚本的末尾,我试图创建一个数组数组,为插入 activerecord 做准备。我试图实现的结构如下:

数组 b 包含一系列 10 个元素的数组

b = [[0,1,2,3,4,5,6,7,8,9],[0,1,2,3,4,5,6,7,8,9],[0,1,2,3,4,5,6,7,8,9]]

目前,当我尝试打印出数组 b 时,数组是空的。就此而言,我对 ruby​​ 和编程还很陌生,非常感谢有关如何获取数组 b 中的值和改进整个脚本的任何反馈。脚本如下:

require "rubygems"  
require "celerity"
t = 0
r = 0
c = 0
a = Array.new(10)
b = Array.new

#initialize Browser
browser = Celerity::IE.new
#goto Login Page
browser.goto('http://www1.drf.com/drfLogin.do?type=membership')
#input UserId and Password
browser.text_field(:name, 'p_full_name').value = 'username'
browser.text_field(:name, 'p_password').value = 'password'
browser.button(:index, 2).click
#goto DRF Frontpage
browser.goto('http://www.drf.com/frontpage')
#goto DRF Entries
browser.goto('http://www1.drf.com/static/indexMenus/eindex.html')
#click the link to access the entries
browser.link(:text, '09').click

browser.tables.each do |table|
t = t + 1
browser.table(:index, t).rows.each do |row|
r = r + 1
browser.table(:index, t).row(:index, r).cells.each do |cell|
a << cell.text
end
b << a
a.clear
end
r = 0
end
puts b
browser.close

最佳答案

这是对主循环的一次小重写,使其更像 Ruby。

b = Array.new
browser.tables.each_with_index do |table, t|
browser.table(:index, 1 + t).rows.each_with_index do |row, r|
a = Array.new(10)
browser.table(:index, 1 + t).row(:index, 1 + r).cells.each do |cell|
a << cell.text
end
b << a
end
end
puts b

我将数组初始化移动到了需要它们的正上方。这当然是程序员的选择。

我没有在上面创建两个计数器变量,而是改用 each_with_index,它添加了一个从 0 开始的索引变量。为了得到你的 1 偏移量,我加 1。

它们的变化不大,但它们加在一起使应用程序更具凝聚力。

回到原始代码:我看到的一个问题是您在循环外创建了 a 数组,然后在分配给 b 时重用它。这意味着每次使用相同的数组,但清除并存储值。这将导致先前的数组值被覆盖,但会导致 b 中出现重复的数组。

require 'pp'

a = []
b = []

puts a.object_id

a[0] = 1
b << a
a.clear

a[0] = 2
b << a

puts
pp b
b.each { |ary| puts ary.object_id }
# >> 2151839900
# >>
# >> [[2], [2]]
# >> 2151839900
# >> 2151839900

请注意 a 数组被重复使用。

如果我将 a 更改为第二个数组,则 b 有两个值,a 是两个独立的对象:

require 'pp'

a = []
b = []

puts a.object_id

a[0] = 1
b << a
a = []

a[0] = 2
b << a

puts
pp b
b.each { |ary| puts ary.object_id }
# >> 2151839920
# >>
# >> [[1], [2]]
# >> 2151839920
# >> 2151839780

希望这能帮助您避免将来出现此问题。

关于用于创建数组数组的 Ruby 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com