当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Table.table[n]用法及代码示例


本文简要介绍ruby语言中 CSV::Table.table[n] 的用法。

用法

table[n] → row
table[range] → array_of_rows
table[header] → array_of_fields

从表中返回数据;不修改表。

表达式 table[n] ,其中 n 是一个非负整数,如果该行存在并且访问模式为 :row:col_or_row ,则返回表的第 +n+ 行:

source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_row! # => #<CSV::Table mode:row row_count:4>
table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
table[1] # => #<CSV::Row "Name":"bar" "Value":"1">

如果 n 为负数,则从最后一行倒数:

table[-1] # => #<CSV::Row "Name":"baz" "Value":"2">

如果 n 太大或太小,则返回 nil

table[4] # => nil
table[-4] => nil

如果访问模式是 :row 并且 n 不是 Integer-convertible object ,则引发异常。

table.by_row! # => #<CSV::Table mode:row row_count:4>
# Raises TypeError (no implicit conversion of String into Integer):
table['Name']

表达式 table[range] (其中 range Range 对象)从表中返回行,从行 range.first 开始,如果这些行存在,并且访问模式是 :row:col_or_row

source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_row! # => #<CSV::Table mode:row row_count:4>
rows = table[1..2] # => #<CSV::Row "Name":"bar" "Value":"1">
rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
rows = table[1..2] # => #<CSV::Row "Name":"bar" "Value":"1">
rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]

如果行数太少,则从range.first 到最后返回所有行:

rows = table[1..50] # => #<CSV::Row "Name":"bar" "Value":"1">
rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]

特殊情况:如果 range.start == table.size ,返回一个空数组:

table[table.size..50] # => []

如果range.end 为负数,则从末尾计算结束索引:

rows = table[0..-1]
rows # => [#<CSV::Row "Name":"foo" "Value":"0">, #<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]

如果range.start 为负数,则从末尾计算起始索引:

rows = table[-1..2]
rows # => [#<CSV::Row "Name":"baz" "Value":"2">]

如果 range.start 大于 table.size ,则返回 nil

table[4..4] # => nil

如果列存在且访问模式为 :col:col_or_row ,则表达式 table[header] (其中 header 是字符串)返回列值(字符串数组):

source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_col! # => #<CSV::Table mode:col row_count:4>
table['Name'] # => ["foo", "bar", "baz"]
table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
col = table['Name']
col # => ["foo", "bar", "baz"]

修改返回的列值不会修改表:

col[0] = 'bat'
col # => ["bat", "bar", "baz"]
table['Name'] # => ["foo", "bar", "baz"]

如果没有这样的列,则返回 nil 值的数组:

table['Nosuch'] # => [nil, nil, nil]

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Table.table[n]。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。