DART lang,使用Map列表,怎么样?

时间:2014-09-06 13:44:59

标签: dart

我是许多行的销售订单,想要将每一行作为一个地图处理(数字,物品代码,数量),并且需要将所有这些地图放在列表中,以便订单行[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;  
 }

2 个答案:

答案 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)。您可以使用自动填充功能。