我有:
index.html
我想要字符串:
deli_line = ["stuff", "things", "people", "places"]
然后,做
"1. stuff 2. things 3. people 4. places"
我无法弄明白。我在做:
string1 += "1. stuff 2. things 3. people 4. places"
我得到输出:
deli_line.each_with_index do |x, i| print "#{i+1}. #{x} " end
我正在尝试将返回值(即数组)附加到字符串,从而导致错误。
答案 0 :(得分:6)
答案 1 :(得分:2)
idx = 1.step
deli_line.map { |s| "%s. %s" % [idx.next, s] }.join(" ")
#=> "1. stuff 2. things 3. people 4. places"
Ruby v.2.1.0更改了http-proxy-rules以允许“省略limit参数,在这种情况下会生成无限的数字序列”(Numeric#step)。
因此
idx = 1.step #=> #<Enumerator: 1:step>
idx.next #=> 1
idx.next #=> 2
idx.next #=> 3
...
经验丰富的Rubiests警报:血腥细节如下。你可能希望避开你的眼睛。
步骤:
enum = deli_line.map
#=> #<Enumerator: ["stuff", "things", "people", "places"]:map>
Ruby在enum
上调用ref:
enum.each { |s| "%s. %s" % [idx.next, s] }
#=> ["1. stuff", "2. things", "3. people", "4. places"]
请注意,当Enumerator#each没有阻止时(例如,被链接到另一个枚举器或Enumerable#map方法[作为Enumerator
include
s {{1} }],它返回一个枚举器。它确实有一个块,但计算与我在下面描述的计算没有什么不同。使用块可能调用或不调用的所有Enumerable
实例方法也是如此。
(Enumerable
依次调用Enumerable因为接收方Enumerator#each
是deli_line
的实例。)
Array
将each
的每个元素传递给块,并将块变量赋值给该值。第一个传递如下(ref Array#each):
enum
并使用方法Enumerator#next执行块计算:
s = enum.next
#=> "stuff"
"%s. %s" % [idx.next, s]
#=> "%s. %s" % [1, "stuff"]
#=> "1. stuff"
的第二个元素传递给块:
enum
对s = enum.next
#=> "things"
"%s. %s" % [idx.next, s]
#=> "2. things"
的第三个和最后一个元素执行类似的计算,之后我们确定:
enum
剩下的就是应用String#%加入arr = deli_line.map { |s| "%s. %s" % [idx.next, s] }
#=> ["1. stuff", "2. things", "3. people", "4. places"]
的元素,每个元素之间有一个空格:
arr
答案 2 :(得分:1)
试试这个:
string = ''
deli_line.each.with_index do |word, index|
string << "#{index+1}. #{word} "
end
puts string #=> 1. stuff 2. things 3. people 4. places