这是我想要做的,但它不工作。通过数组和提取元素的红宝石循环
array = [1,2,3,4,5]
array.each do |val1, val2, val3, val4, val5|
puts "#{val1} topic is #{val2}, #{val3} topic is #{val4}, All topics ${val5}"
end
这是我想要做的,但它不工作。通过数组和提取元素的红宝石循环
array = [1,2,3,4,5]
array.each do |val1, val2, val3, val4, val5|
puts "#{val1} topic is #{val2}, #{val3} topic is #{val4}, All topics ${val5}"
end
array.each
将要执行的块(do
和end
之间的部分)一次每个元素在array
中,每次使用该元素作为块的第一个参数。
这意味着执行了块中的第一时间,val1
将等于1
,和val2
,val3
等将nil
因为只有一个值被传递给该块。第二次执行块时,val1
将等于2
。 val2
,val3
等每次都会是nil
。
如果要将数组的元素提取到变量中,则不需要循环。所有你需要做的是这样的:
val1, val2, val3, val4, val5 = array
puts "#{val1} topic is #{val2}, #{val3} topic is #{val4}, All topics #{val5}"
这可能不是必要的,但是,因为你可以在你的字符串插值引用数组元素直接(#{...}
):
puts "#{array[0]} topic is #{array[1]}, #{array[2]} topic is #{array[3]}, All topics #{array[4]}"
如果这是在它们之间的元件和词语的固定阵列,只是做:
puts "#{array[0]} topic is #{array[1]}, #{array[3]} topic is #{array[4]}, All topics is #{array[5]}"
array = [1,2,3,4,5]
val1, val2, val3, val4, val5 = array
puts "#{val1} topic is #{val2}, #{val3} topic is #{val4}, All topics #{val5}"
您可以使用String#%
方法:
puts "%d topic is %d, %d topic is %d, All topics $%d" % array
我是这种方法的粉丝,但你应该包含一个链接到['sprintf']的文档(http://www.ruby-doc.org/core-2.1.2/Kernel.html#method- i-sprintf),因为它描述了(许多)格式化选项。 – 2014-08-28 18:33:17
你*欢迎*编辑* .. :-) – 2014-08-28 18:35:10
这里的一个方式,其允许的array
元素是不同类型的对象,并为array
具有可变长度(以特定的暗示方式定义)。
代码
def fmt(array)
(array[0..-2].each_slice(2)
.map { |e| e.join(' topic is ') } \
<< "all topics #{array.last}").join(', ')
end
实例
fmt [1,2,3,4,5,6,7]
#=> "1 topic is 2, 3 topic is 4, 5 topic is 6, all topics 7"
fmt [2.1,3,"hi","ho",:a]
#=> "2.1 topic is 3, hi topic is ho, all topics a"
array = ["First", "loops", "second", "methods", "third", "metaprogramming",
"are important for you to understand"]
fmt(array)
#=> "First topic is loops, second topic is methods, third topic is " +
# "metaprogramming, all topics are important for you to understand"
这里的一个方式,其允许的array
元素是不同种类的对象和用于array
为具有可变长度(定义在一种特别的,暗示的方式)。
代码
def fmt(array)
(array[0..-2].each_slice(2)
.map { |e| e.join(' topic is ') }
.push "all topics #{array.last}")
.join(', ')
end
实例
fmt([1,2,3,4,5,6,7])
#=> "1 topic is 2, 3 topic is 4, 5 topic is 6, all topics 7"
fmt([1,2.5,"cat","dog",:symbol])
#=> "1 topic is 2.5, cat topic is dog, all topics symbol"
array = ["First", "loops", "second", "methods", "third", "metaprogramming",
"are important for you to understand"]
fmt(array)
#=> "First topic is loops, second topic is methods, third topic is " +
# "metaprogramming, all topics are important for you to understand"
在那里总是5个元素?会有更多?这两个词之间的逻辑是什么? – Anthony 2014-08-28 18:24:16
你想让你的输出看起来像什么? – 2014-08-28 18:24:59