我发现了一个读取excel表格行的函数:
self.rows[start_row..-1]
其中start_row
为12
。
我想知道print [12..-1]
的输出。我试过这些代码:
[12..-1].each{|n| puts n}
(12..-1).each {|n| puts n}
但没有找到运气。我得到了
[12..-1]
# [12..-1]
[12..-1].each {|x| puts x}
# >> 12..-1
# => [12..-1]
(12..-1).each {|x| puts x}
# => 12..-1
从正面向负方向走的范围是多少?如何在控制台中打印这样的范围?
答案 0 :(得分:4)
从正面向负方向前进的范围是什么?
我假设rows
是一个数组。在这种情况下,-1
表示最后一个元素,-2
倒数第二个,-3
倒数第二个,依此类推:
array = ['a', 'b', 'c', 'd', 'e', 'f']
array[2..-1] #=> ["c", "d", "e", "f"]
array[2..-2] #=> ["c", "d", "e"]
array[2..-3] #=> ["c", "d"]
Array#[]
(以及其他)允许您指定从开始计数的正指数和从结束计数的负指数:
# 0 1 2 3 4 5
#-6 -5 -4 -3 -2 -1
['a', 'b', 'c', 'd', 'e', 'f']
实施方面,您可以将array[-5]
视为array[array.length-5]
。
所以,1
和-5
引用"b"
:
array[1] #=> "b"
array[-5] #=> "b"
就像4
和-2
引用"e"
:
array[4] #=> "e"
array[-2] #=> "e"
此外,所有这些范围都返回相同的子数组(对于长度为6的数组):
array[1..4] #=> ["b", "c", "d", "e"]
array[1..-2] #=> ["b", "c", "d", "e"]
array[-5..4] #=> ["b", "c", "d", "e"]
array[-5..-2] #=> ["b", "c", "d", "e"]
你的例子:
rows[start_row..-1]
相当于:
rows[start_row..rows.length-1]
回答你的其他问题
如何在控制台中打印此范围?
您可以使用downto
:
12.downto(-1) { |i| puts i }
输出:
12
11
10
9
8
7
6
5
4
3
2
1
0
-1
但请注意,这些索引与rows[12..-1]
返回的索引不同:
array = ['a', 'b', 'c', 'd', 'e', 'f']
array[3..-1]
#=> ["d", "e", "f"]
array.values_at(3, 2, 1, 0, -1)
#=> ["d", "c", "b", "a", "f"]
答案 1 :(得分:2)
Range不会向下工作(正面 - >正面较小,正面 - >负面,或负面 - >负面影响较小)因为:
将范围视为序列(#each和从Enumerable继承的方法)的方法期望begin对象实现succ方法以按顺序返回下一个对象。
和Integer#succ
方法:
返回int的后继,即Integer等于int + 1.
因此,您无法在数字中添加一个并以较少的数字结尾。 self.rows[start_row..-1]
有效的原因是,Range
虽然end
实际上没有实际遍历范围,但Array#[]
的负数却是beginning index
范围的1}}实际上并不被视为负数,而是负数索引,它告诉数组从数组的末尾向后计数。
length
实际上最终会将范围转换为length
和beg
,并从12
开始返回-1
个元素。
作为旁注,打印来自12.downto(-1) { |x| puts x }
- >的所有数字。 Array#[]
,你可以做到
begin
但这并不是end
方法的作用,它将范围视为-1
和AS
BEGIN
IF(@statement = 1)
BEGIN
INSERT INTO [employee].[dbo].[emp_detail] ([fname], [lname], [age],[gender],
[department], [salary])
VALUES (@fname, @lname, @age, @gender,
@department, @salary)
END
IF(@statement = 2)
BEGIN
SELECT *
FROM emp_detail
END
,并将任何负数转换为向后计数数组的结尾,List<Nullable<int>> tbl = context.USP_MVC(2,fname, lname,Convert.ToInt32(age), gender, department, salary).ToList();
是最后一个元素。
答案 2 :(得分:2)
如何在控制台中打印此范围?
如果您想使用range
而正中使用否定顺序:
> (-1..12).to_a.reverse
#=> [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1]
range
否定至正面顺序:
> (-1..12).to_a
#=> [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]