我是许多行的销售订单,想要将每一行作为一个地图处理(数字,物品代码,数量),并且需要将所有这些地图放在列表中,以便订单行[0]是地图第一个订单行。
如果我有3行,那么下面的效果非常好。
但是,如果我不知道行数,并且它取决于用户,那么如何定义呢!
var orderLines = [{ 'number' : '',
'Item' : '',
'Qty' : ''
},
{ 'number' : '',
'Item' : '',
'Qty' : ''
},
{ 'number' : '',
'Item' : '',
'Qty' : ''
}
];
我需要定义“orderLines”,以便我可以通过以下代码中的数据填充它:
for(int i=0;i<=number_of_lines;i++){
orderLines[i]['number']=element.childNodes[i].childNodes[0].value;
orderLines[i]['number']=element.childNodes[i].childNodes[1].value;
orderLines[i]['Qty']=element.childNodes[i].childNodes[2].value;
}
答案 0 :(得分:3)
如果列表短于索引,则无法在特定索引处为List分配值。
您必须使用add
填写列表。如果列表已在给定索引处具有值,则可以将值替换为mylist[someIndex] = someValue;
var orderLines = <Map>[]; // creates an empty List<Map>
for(int i=0; i <= number_of_lines; i++){
var map = {};
map['number'] = element.childNodes[i].childNodes[0].value;
map['Item'] = element.childNodes[i].childNodes[1].value;
map['Qty'] = element.childNodes[i].childNodes[2].value;
orderLines.add(map);
}
或
for(int i = 0; i <= number_of_lines; i++){
orderLines.add({
'number': element.childNodes[i].childNodes[0].value,
'Item': element.childNodes[i].childNodes[1].value,
'Qty': element.childNodes[i].childNodes[2].value});
}
我不确定你想知道什么,但我想这就是你要找的东西
var orderLines = <Map>[]; // creates an empty List<Map>
orderLines.add({ 'number' : '',
'Item' : '',
'Qty' : ''
});
orderLines.add({ 'number' : '',
'Item' : '',
'Qty' : ''
});
orderLines.add({ 'number' : '',
'Item' : '',
'Qty' : ''
});
答案 1 :(得分:0)
您还可以重新考虑使用自己的类而不是地图。
class OrderLine{
String number;
String item;
String qty;
OrderLine.fromElement(Element element){
number = element.childNodes[0].value;
/// ...
}}
for(Element element in elements){
orderLines.add(new OrderLine.fromElement(element.childNodes[i]));
}
此解决方案使您的代码更易于维护。您可以完全使用typecheck(数字可能不会被键入为String)。您可以使用自动填充功能。