lua刷新/替换array2d

时间:2016-11-10 06:11:23

标签: arrays multidimensional-array lua lua-table

我的array2d有问题。我实际上想要计划刷新命令。

data.txt

上的数据
define([
  'angular'
], function (angular) {
  angular.module('form.formDirective', [])
      .directive('formDirective', formDirective);

formDirective.$inject = ["$rootScope", "$sce", "$document", "$translate", "$filter", "$http"];

  function formDirective($rootScope, $sce, $document, $translate, $filter, $http) {

    var myLink = function ($scope, $element, attrs) {
          //modified
        $scope.$watch.setFieldsForName = function(name) {
            var url = 'http://some.rest.api/getSsn/' + name;
            $http.get(url)
                .success(function(data, status, headers, config) {
                    $scope.personSsn = data.SSN;  
                })
                .error(function (data, status, headers, config) {
                  // no-op
                });
        };
         //modified
        $scope.$watch.setFieldsForSsn = function(ssn) {
            var url = 'http://some.rest.api/getName/' + ssn;
            $http.get(url)
                .success(function(data, status, headers, config) {
                    $scope.personSsn = data.name;     
                })
                .error(function (data, status, headers, config) {
                  // no-op
                });
        };

    };

    return {
      templateUrl: 'form.directive.html',
      restrict   : 'EA',
      scope      : {
        field         : '=',
        model         : '=',
        renameChildKey: "=",
        preview       : "=",
        delete        : '&',
        ngDisabled    : "=",
        isEditData    : "="
      },
      replace    : true,
      link       : myLink
    };
    }
    });

所以每当我调用函数ReadData时。它将向我的Array2d发送如下内容:

test1:30:1
test2:40:2

但问题是每次我都称之为功能。它会一直添加相同的数据,我想只做刷新或替换可能,当我做一些事件。 我的代码

line_data = {{"test1", "30", "1"},
             {"test2", "40", "2"}}

也许你们可以帮我解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您将在重新读取文件后覆盖line_data。所以我认为最好的方法是从阅读功能本身获取数组并替换旧数组。这是我的例子:

function ReadData(_path)
    local tmp = {}
    local file = io.open(_path, "r")
    for line in file:lines() do
        tmp[#tmp+1] = { line:match('([^:]+):(%d+):(%d+)') }
    end
    file:close()
    return tmp
end

function Array2dAsStr(_array)
    local function cutRight(_s, _i)
        _i = _i or 1
        return _s:sub(1, (_s:len())-1*_i)
    end
    local sOut = '{'
    for _, v in pairs(_array) do
        sOut = sOut..'{'
        for _, v1 in pairs(v) do
            sOut = sOut..v1..','
        end
        sOut = cutRight(sOut)..'},'
    end
    return cutRight(sOut)..'}'
end

line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))

-- if you read again the file, the old stuff from line_data will overwritten
line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))

答案 1 :(得分:0)

如果您想用新数据填充现有行,那么您需要一些ID。如果该id只是名称,即字符串的第一部分,则更改将数据附加到数组的行:

-- old code    
-- line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }

-- new code
local name, score1, score2 = line:match('([^:]+):(%d+):(%d+)')
line_data[name] = {score1, score2}