捕获`each_with_index`的输出并忽略返回

时间:2016-03-21 18:31:01

标签: ruby

我有:

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

我正在尝试将返回值(即数组)附加到字符串,从而导致错误。

3 个答案:

答案 0 :(得分:6)

deli_line.map.with_index(1){| x,i | "#{I}。 #{x}"}。加入("") #=> " 1。东西2.东西3.人4.地方"

答案 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#eachdeli_line的实例。)

Arrayeach的每个元素传递给块,并将块变量赋值给该值。第一个传递如下(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