编辑:问题是无法在哈希中获取数组的数量,所以它可以是,x = 数组的数量。所以它可以用作 function.each_index{|x| 代码 }
尝试使用行数的索引作为重复操作 X 次的方式,具体取决于从 CSV 文件中提取的数据量。
终端发出
=> Can't convert symbol to integer (TypeError)
完全错误:
=> ~/home/tests/Product.rb:30:in '[]' can't convert symbol into integer (TypeError) from ~home/tests/Product.rub:30:in 'getNumbRel'
from test.rb:36:in '<main>'
执行动作的功能是:
def getNumRel
if defined? @releaseHashTable
return @releaseHashTable[:releasename].length
else
@releaseHashTable = readReleaseCSV()
return @releaseHashTable[:releasename].length
end
end
csv 数据拉取只是数组的散列,没有什么时髦的。
def readReleaseCSV()
$log.info("Method "+"#{self.class.name}"+"."+"#{__method__}"+" has started")
$log.debug("reading product csv file")
# Create a Hash where the default is an empty Array
result = Array.new
csvPath = "#{File.dirname(__FILE__)}"+"/../../data/addingProdRelProjIterTestSuite/releaseCSVdata.csv"
CSV.foreach(csvPath, :headers => true, :header_converters => :symbol) do |row|
row.each do |column, value|
if "#{column}" == "prodid"
proHash = Hash.new { |h, k| h[k] = [ ] }
proHash['relid'] << row[:relid]
proHash['releasename'] << row[:releasename]
proHash['inheritcomponents'] << row[:inheritcomponents]
productId = Integer(value)
if result[productId] == nil
result[productId] = Array.new
end
result[productId][result[productId].length] = proHash
end
end
end
$log.info("Method "+"#{self.class.name}"+"."+"#{__method__}"+" has finished")
@productReleaseArr = result
end