나는 포인트 목록을 가지고 있으며 침식/팽창 수술을해야한다. 일종의 2D 배열이 필요하지만 VisualWorks에서 수행하는 방법을 찾을 수 없습니다 (Squeak에 Array2d 클래스가 있다는 것을 알고 있지만 VW를 사용해야합니다). 단순히 일반적인 방법스몰 토크에서 2D 배열을 관리하는 방법은 무엇입니까?
4
A
답변
3
사용 : 배열의 배열 : 당신이 효율적으로 운영하려면
(Array new: xSize)
at: 1 put: ((Array new: ySize) at: 1 put: aValue; at: 2 put: aValue; ...);
at: 2 put: ((Array new: ySize) at: 1 put: aValue; at: 2 put: aValue; ...);
...
2
에서, VisualWorks 이미지 클래스, 프로토콜 "이미지 처리"와 "비트 처리"를 연구한다. 거기에 기본 요소를 기반으로 자신의 침식/확장 작업을 작성하십시오.
4
많은 스몰 토크 구현에는 #rowAt : columnAt : (또는 간략 #at : at :)와 같은 메서드가 포함 된 일종의 Matrix 클래스가 있으며 때로는 최적화되어 있습니다.
GNU 스몰 토크에서 이것은 DhbNumericalMethods 패키지에 있습니다. 지금은 최적화되지 않았습니다.
2
여기에 Squeak의 2 차원 배열을 다루는 또 다른 방법이 있습니다 (4.2 버전 사용).
test := Matrix new: 3. "this defines a 3 x 3 array"
test at: 1 at: 1 put: 5.
test at: 1 at: 2 put: 6.
test at: 1 at: 3 put: 7.
등 등. AFAIK는 2D 배열 만 이렇게 할 수 있으며 정사각형이어야합니다. 이것은 내 아들과 내가 스도쿠 게임을 만들기 위해 노력하고있는 프로젝트, ymmv에서 잘 작동했습니다. 건배!
+0
이것은 : 새로운 매트릭스가 끽끽 소리에 작동하지 않는다는 것을 당신이 조언하는 것을 확실히하십시오. 클래스 이름보다 사실은 "새로운"고정하기 전에 또한 dosnt 작업 온다. –
그건 내 첫 번째 생각 이었지만 더 좋은 방법이 없는지 궁금해했습니다. 그러나 대답을 주셔서 감사합니다. 그것은 그것이 받아 들일 수있는 방법으로 간주 될 수 있다는 것을 보여줍니다. –