我在这里构建数组:
def initialize
@names = []
end
@names << page.all('//*[@id="USERS_AVAIL"]/option').map {|result| result.text.split(", ")}
稍后我试图通过遍历名称数组来编译和访问url:
@names.each do |name|
visit "https://example.com/k=#{name}&tpe=1"
end
一些put语句向我展示了每个方法都是一次性调用数组的每个元素,而不是按预期迭代。 I.E。:"https://example.com/k=#{[[%22Adviento%22,%20%22Justin%22],%20[%22Asamoah%22,%20%22Nathan%22],%20[%22Baughman%22,%20%22Zachary%22],}&tpe=1"
。 @ names.length的计数只有4,但@names数组的put会显示正确的输出?我不确定会出现什么问题,提前感谢任何协助。
答案 0 :(得分:2)
将<<
替换为+=
。 <<
将整个数组作为其自身的单个元素插入,而+=
将连接数组,这似乎是您的意图。
例如:
a = [1,2,3]
# => [1, 2, 3]
a << [4,5,6]
# => [1, 2, 3, [4, 5, 6]] # WRONG
a = [1,2,3]
# => [1, 2, 3]
a += [4,5,6]
# => [1, 2, 3, 4, 5, 6] # CORRECT
尝试:
@names += page.all('//*[@id="USERS_AVAIL"]/option')
.map { |r| r.text.split(',').map(&:strip) }.flatten
如果引号是字面形式%22
,并且您想捕获它们之间的字符串:
@names += page.all('//*[@id="USERS_AVAIL"]/option')
.map { |r| r.text.scan(/%22([^%]+)%22/) }.flatten