Ruby - 在循环中连接数组元素的问题

时间:2013-12-28 20:37:17

标签: ruby for-loop

我是Ruby的新手,并且在for循环中连接字符串时遇到了一些问题。

这是我到目前为止所拥有的

# search request
search = ["testOne", "testTwo"]

# Create base url for requests in loop
base_url = "http://example.com/"

# create an empty response array for loop below
response = []

search.each do |element|
  response = "#{base_url}#{element}"
end

我希望回复[0]来保持“http://example.com/testOne”。但是,循环执行后,response [0]只保存我的基本变量的第一个字母(h);响应持有“http://example.com/testTwo”。

我认为这是一个简单的错误,但找不到任何有用的资源。

1 个答案:

答案 0 :(得分:5)

使用Array#<<方法

# search request
search = ["testOne", "testTwo"]

# Create base url for requests in loop
base_url = "http://example.com/"

# create an empty response array for loop below
response = []

search.each do |element|
  response << "#{base_url}#{element}"
end

response # => ["http://example.com/testOne", "http://example.com/testTwo"]

response = "#{base_url}#{element}"表示您在每次迭代中为局部变量 response分配一个新的字符串对象。在最后一次迭代中,response保存字符串对象"http://example.com/testTwo"。现在response[0]表示您正在调用方法String#[]。因此,在字符串0索引 "http://example.com/testTwo"中,出现的字符为h,因此您的response[0]返回'h' - 这是根据您的代码预期。

相同的代码可以用更甜蜜的方式编写:

# search request
search = ["testOne", "testTwo"]

# Create base url for requests in loop
base_url = "http://example.com/"

response = search.map {|element| base_url+element }
response # => ["http://example.com/testOne", "http://example.com/testTwo"]

response = search.map(&base_url.method(:+))
response # => ["http://example.com/testOne", "http://example.com/testTwo"]

或者,正如 Michael Kohl 所指出的那样:

response = search.map { |s| "#{base_url}#{s}" }
response # => ["http://example.com/testOne", "http://example.com/testTwo"]