Examples of this functionality is in the Scripting Index. It's also basic Python, these objects were designed to behave with the functionality a Python programmer would expect. The data table object's mapping operator [ ] gives you back a column object reference, which can then be iterated across for the row value. The data table mapping can take either the 'name' or the 0 based index. So where i, and j are both integers
dt[ i ][ j ] is still perfectly valid.
As is the following
for x in dt:
x[row] = value
Here this iterates across dt in order without needing to know either the index or the name of the column.
The key to remember is that the dt object is a collection of columns, and the column is a collection of rows, so the indexing is dt[ column ] [ row ].
Also len(dt) returns number of columns as does dt.ncols.
Similarly len( dt[0] ) returns the length of the first column as does dt.nrows since all columns are the same length.