簡體   English   中英

Smalltalk中真的沒有預定義的動態2D容器嗎? 我必須自己做嗎?

[英]Is there really no predefined dynamic 2d container in Smalltalk? Do I have to make my own?

我需要一個動態的2D容器,但令我感到驚訝的是,我在Collections中找不到任何有用的東西。 因此,我以過時的方式制作了自己的作品,但以某種方式,我覺得一定缺少某種東西。 smalltalk pharo中的整個概念基於使用他們的東西,而不必自己構建。

好的,因此您希望有按行和列排列的對象集合(在您的情況下為變形)。 這是一種方法

  1. 初始化:在類中創建一個實例變量來保存對象,並將其初始化為:

     morphs := OrderedCollection new 
  2. 加法:通過這種方法將新對象放入您的集合中

     placeMorph: morph atRow: i column: j | row | row := morphs at: i ifAbsentPut: [OrderedCollection new]. j - row size timesRepeat: [row add: nil]. row at: j put: morph 

需要注意的是通過添加nil准確j - row size倍(其可以是<= 0 )可確保在排狹槽的存在ij

  1. 檢索 :在網格或nil的給定位置獲取對象

     morphAtRow: i column: j | row | row := morphs at: i ifAbsent: [^nil]. ^row at: j ifAbsent: [nil] 

另一種可能性是使用Dictionary ,如果網格很大且稀疏,這可能很有意義。 在這種情況下,您可以執行以下操作

  1. 初始化

     morphs := Dictionary new 
  2. 加成

     placeMorph: morph atRow: i column: j morphs at: i -> j put: morph 
  3. 恢復

     morphAtRow: i column: j ^morphs at: i -> j ifAbsent: [nil] 

請注意,我已經使用關聯i -> j作為鍵。 另一種可能是使用對{ij}

Pharo具有Matrix類。 那幾乎是一個2D容器,除非您正在談論我不明白的其他事情:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM