table.getn(tableName) 的用法注意。

转自:http://blog.sina.com.cn/s/blog_4a2e9af90100cv1z.html

 

 

1.table.getn(tableName)       

--等同于操作符 #

 

作用:得到一个table的大小。

注意:该table的key必须是有序的,索引是从1开始的。

 

例如:

a)有序table:

local table1 = {10, 20, 30, 50, 1000};

用table.getn(table1) 或 #table1 得到 5。

 

b) 无序table:

local table2 = {

    ["bb"] = 1,

    ["cc"] = 2,

    ["dd"] = 3,

    ["ee"] = nil,

    ["ff"] = 4,

}

用table.getn(table2) 或 #table2  无法得到正确的大小。

 

这种table如果想得到大小一般我这样做:

local count = 0

for k,v in pairs(table2) do

    count = count + 1

end

for (TemplateEntity template : ctx.getTemplateEntityMap().values()) { TableEntity masterTable = template.getMasterTable(); String masterIdField = masterTable.getIdFields().getFirst(); // table attr DataEntity dataEntity = new DataEntity(); dataEntity.setTableName(masterTable.getTableName()); dataEntity.setTableEntity(masterTable); // row attr DataExportContext.QueryResult queryResult = ctx.getQueryResultMap().get(template.getConfigTypeId()); List<Map<String, Object>> masterRows = queryResult.getMasterRows(); Map<String, List<Map<String, Object>>> slaveRowsMap = queryResult.getSlaveRowsMap(); Map<String, TableEntity> slaveTables = masterTable.getSlaveTables(); List<DataRow> dataRows = new ArrayList<>(); for (Map<String, Object> masterRow : masterRows) { Object masterIdValue = masterRow.get(masterIdField); DataRow masterDataRow = new DataRow(); masterDataRow.setData(masterRow); masterDataRow.setSubItems(Collections.emptyMap()); for (Map.Entry<String, TableEntity> entry : slaveTables.entrySet()) { String slaveTableName = entry.getKey(); TableEntity slaveMeta = entry.getValue(); // 组装从表数据 start DataEntity slaveDataEntity = new DataEntity(); slaveDataEntity.setTableName(slaveTableName); slaveDataEntity.setTableEntity(slaveMeta); List<Map<String, Object>> allSlaveRows = slaveRowsMap.get(slaveTableName); if (allSlaveRows == null || allSlaveRows.isEmpty()) { continue; } List<DataRow> rows = new ArrayList<>(); String fkField = slaveMeta.getFkFields().getFirst(); allSlaveRows.stream() .filter(row -> Objects.equals(row.get(fkField), masterIdValue)) .forEach(row -> { DataRow e = new DataRow(); e.setData(row); rows.add(e); }); slaveDataEntity.setRows(rows); // 组装从表数据 end masterDataRow.getSubItems().put(slaveTableName, slaveDataEntity); dataRows.add(masterDataRow); } } dataEntity.setRows(dataRows); ctx.setDataEntityMap(Map.of(template.getConfigTypeId(), dataEntity)); } public class DataEntity { String tableName; List<DataRow> rows; TableEntity tableEntity; } public class DataRow { private Map<String, Object> data; private Map<String, DataEntity> subItems; } 上述方法的转换逻辑是正确
最新发布
01-07
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值