Ruby 稀疏矩阵的哈希
Ruby hash for Sparse Matrix
我知道Ruby中有几个libraries。但我必须创建自己的(出于学习目的)。
我正在考虑两种方法:
一个散列,而键是
形式的字符串
myhash["row.col"]
这样当元素不存在时我可以使用默认值零。
或创建稀疏 class,然后检查元素 return 其值:
class SparseMatrix < Array
require 'contracts'
include Contracts
attr_accessor :value, :array
attr_reader :row, :col
@@array = Array.new
Contract Num, Num, Num => nil
def initialize(value,row,col)
@value = value
@row = row
@col = col
end
def self.all_instances
@@array
end
Contract Num, Num => Num
def getElement(row,col)
flag = false
array.each do |x|
if x.row == row && x.col == col
return x.value
end
end
0
end
end
我不希望这是主观的,我想知道对于最常用的设计模式,哪种格式更符合逻辑? (我的问题是因为 "row.col" 似乎更容易开始,它还涉及几个转换 from/to strings/numbers 并且它可能有性能问题。(我是 [=32= 的新手], 所以我不确定)
使用哈希方式,因为它简单、编写速度快、访问速度快。
对于散列键,使用这样的数组:
hash[[row,col]] = value
您可以为行和列使用任何内容,例如字符串、数字、复杂对象等。
出于学习目的,您可能对包装 Hash 感兴趣:
class SparseMatrix
def initialize
@hash = {}
end
def [](row, col)
@hash[[row, col]]
end
def []=(row, col, val)
@hash[[row, col]] = val
end
end
用法:
matrix = SparseMatrix.new
matrix[1,2] = 3
matrix[1,2] #=> 3
出于学习目的,您可以使用任意数量的维度:
class SparseMatrix
def initialize
@hash = {}
end
def [](*keys)
@hash[keys]
end
def []=(*keys, val)
@hash[keys] = val
end
end
用法:
matrix = SparseMatrix.new
matrix[1,2,3,4] = 5
matrix[1,2,3,4] #=> 5
我知道Ruby中有几个libraries。但我必须创建自己的(出于学习目的)。
我正在考虑两种方法:
一个散列,而键是
形式的字符串myhash["row.col"]
这样当元素不存在时我可以使用默认值零。
或创建稀疏 class,然后检查元素 return 其值:
class SparseMatrix < Array
require 'contracts'
include Contracts
attr_accessor :value, :array
attr_reader :row, :col
@@array = Array.new
Contract Num, Num, Num => nil
def initialize(value,row,col)
@value = value
@row = row
@col = col
end
def self.all_instances
@@array
end
Contract Num, Num => Num
def getElement(row,col)
flag = false
array.each do |x|
if x.row == row && x.col == col
return x.value
end
end
0
end
end
我不希望这是主观的,我想知道对于最常用的设计模式,哪种格式更符合逻辑? (我的问题是因为 "row.col" 似乎更容易开始,它还涉及几个转换 from/to strings/numbers 并且它可能有性能问题。(我是 [=32= 的新手], 所以我不确定)
使用哈希方式,因为它简单、编写速度快、访问速度快。
对于散列键,使用这样的数组:
hash[[row,col]] = value
您可以为行和列使用任何内容,例如字符串、数字、复杂对象等。
出于学习目的,您可能对包装 Hash 感兴趣:
class SparseMatrix
def initialize
@hash = {}
end
def [](row, col)
@hash[[row, col]]
end
def []=(row, col, val)
@hash[[row, col]] = val
end
end
用法:
matrix = SparseMatrix.new
matrix[1,2] = 3
matrix[1,2] #=> 3
出于学习目的,您可以使用任意数量的维度:
class SparseMatrix
def initialize
@hash = {}
end
def [](*keys)
@hash[keys]
end
def []=(*keys, val)
@hash[keys] = val
end
end
用法:
matrix = SparseMatrix.new
matrix[1,2,3,4] = 5
matrix[1,2,3,4] #=> 5