我能给你什么建议……首先,setRow:column:value:
如果当前列大小小于所需的大小,则可以只使用有序集合,然后添加缺少的 OrderedCollection 实例。与所需的行大小相同(添加 0)。实现将是这样的:
initialize
rows := OrderedCollection new
setRow: aRow column: aColumn value: aValue
| row |
rows size < aRow ifTrue: [
(aRow - rows size) timesRepeat: [rows add: OrderedCollection new]].
row := rows at: aRow.
row size < aColumn ifTrue: [
(aColumn - row size) timesRepeat: [row add: 0]].
row at: aColumn put: aValue
getRow: aRow column: aColumn
aRow <= rows size ifTrue: [
|row|
row := rows at: aRow.
aColumn <= rows size ifTrue: [^ row at: aColumn]].
^ 0
但更有效的方法是实现我认为的稀疏矩阵。你有很多在wiki描述的结构。请注意,只有当您的元素数量相对于矩阵本身的大小而言较少时,此矩阵才有效。但是,如果您要检查最简单的实现,例如在字典中存储坐标值数据,那么它将非常适合您:
initialize
dict := Dictionary new
setRow: aRow column: aColumn value: aValue
dict at: aRow@aColumn put: aValue
getRow: aRow column: aColumn
dict at: aRow@aColumn ifAbsent: [0]