Skip to content

Commit a50dddb

Browse files
committed
Implemented messages for adding rows and columns to a data frame
1 parent 16e2c20 commit a50dddb

File tree

17 files changed

+172
-22
lines changed

17 files changed

+172
-22
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
adding
2+
addColumn: anArray named: columnName
3+
4+
contents addColumn: anArray.
5+
columnNames := columnNames copyWith: columnName.
6+
7+
columnTypes := columnTypes copyWith: nil. "Extend an array"
8+
self induceColumnTypeAt: (self numberOfColumns).
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
adding
2+
addRow: anArray named: rowName
3+
4+
contents addRow: anArray.
5+
rowNames := rowNames copyWith: rowName.
6+
self induceColumnTypes.
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
accessing
22
at: rowNumber at: columnNumber put: value
33

4-
| typeInductor |
5-
64
contents at: rowNumber at: columnNumber put: value.
7-
8-
typeInductor := DataTypeInductor new.
9-
columnTypes at: columnNumber put:
10-
(typeInductor
11-
leastCommonSuperclassOf: value class
12-
and: (columnTypes at: columnNumber)).
5+
self induceColumnTypeAt: columnNumber.
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
accessing
22
columnAt: aNumber put: anArray
3-
4-
| typeInductor type |
53

64
anArray size = self numberOfRows
7-
ifFalse: [ SizeMismatch signal ].
8-
9-
typeInductor := DataTypeInductor new.
10-
type := typeInductor typeOf: anArray.
5+
ifFalse: [ SizeMismatch signal ].
116

127
contents columnAt: aNumber put: anArray.
13-
columnTypes at: aNumber put: type.
8+
self induceColumnTypeAt: aNumber.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
accessing
2+
induceColumnTypeAt: aNumber
3+
"Indeces the least common superclass for all values of a column of given by its number"
4+
5+
| inductor type |
6+
inductor := DataTypeInductor new.
7+
type := inductor typeOf: (self columnAt: aNumber).
8+
9+
columnTypes at: aNumber put: type.
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
accessing
22
rowAt: aNumber put: anArray
33

4-
| typeInductor |
54
anArray size = self numberOfColumns
65
ifFalse: [ SizeMismatch signal ].
76

87
contents rowAt: aNumber put: anArray.
9-
10-
typeInductor := DataTypeInductor new.
11-
columnTypes := (1 to: self numberOfColumns) collect: [ :j |
12-
typeInductor
13-
leastCommonSuperclassOf: (columnTypes at: j)
14-
and: (anArray at: j) class. ].
8+
self induceColumnTypes.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
adding
2+
addColumn: anArray
3+
4+
| newContents |
5+
6+
anArray size = self numberOfRows
7+
ifFalse: [ SizeMismatch signal ].
8+
9+
newContents := Matrix
10+
rows: (self numberOfRows)
11+
columns: (self numberOfColumns + 1).
12+
13+
1 to: self numberOfRows do: [ :i |
14+
1 to: self numberOfColumns do: [ :j |
15+
newContents at: i at: j put:
16+
(self at: i at: j) ] ].
17+
18+
1 to: self numberOfRows do: [ :i |
19+
newContents at: i at: (self numberOfColumns + 1)
20+
put: (anArray at: i) ].
21+
22+
contents := newContents.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
adding
2+
addRow: anArray
3+
4+
| newContents |
5+
6+
anArray size = self numberOfColumns
7+
ifFalse: [ SizeMismatch signal ].
8+
9+
newContents := Matrix
10+
rows: (self numberOfRows + 1)
11+
columns: (self numberOfColumns).
12+
13+
1 to: self numberOfRows do: [ :i |
14+
1 to: self numberOfColumns do: [ :j |
15+
newContents at: i at: j put:
16+
(self at: i at: j) ] ].
17+
18+
1 to: self numberOfColumns do: [ :j |
19+
newContents at: (self numberOfRows + 1) at: j
20+
put: (anArray at: j) ].
21+
22+
contents := newContents.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
tests
2+
testAddColumn
3+
4+
| expected |
5+
6+
expected := DataFrameInternal fromRows: #(
7+
('Barcelona' 1.609 true 9)
8+
('Dubai' 2.789 true 8)
9+
('London' 8.788 false 7)).
10+
11+
df addColumn: #(9 8 7).
12+
13+
self assert: df equals: expected.
14+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
tests
2+
testAddColumnSizeMismatch
3+
4+
| aBlock |
5+
aBlock := [ df addColumn: #(1 2 3 4) ].
6+
7+
self should: aBlock raise: SizeMismatch.
8+

0 commit comments

Comments
 (0)