Перебор массива в функции - PullRequest
6 голосов
/ 05 апреля 2011

Для моего модуля электронных таблиц Google Docs мне бы хотелось, чтобы функция могла принимать массив значений и перебирать их, добавляя их в хеш. Форма отправки электронной таблицы требует значения в таком формате:

{"entry.0.single": value0,
 "entry.1.single": value1,
 "entry.2.single": value2}

Если функция принимает массив, подобный следующему,

[value0, value1, value2]

можно ли зациклить их, сохранить счетчик и создать хеш? Это было бы простой задачей на других языках. Python достаточно для иллюстрации:

hash = dict()
i = 0
for val in values:
  hash["entry.%s.single" % i] = val
  i += 1

Можно ли это сделать в KRL?

1 Ответ

3 голосов
/ 05 апреля 2011

Рекурсивные функции - ваш друг:

    a = ['value0', 'value1', 'value2'];

    r = function(a, h, n){
      top = a.head();
      newhash = h.put({'entry.#{n}.single':top});
      a.length() > 1 => r(a.tail(), newhash, n+1) | newhash;
    };

    out = r(a, {}, 0);

out имеет значение {'entry.1.single' :'value1','entry.0.single' :'value0','entry.2.single' :'value2'};

Здесь необходима рекурсивная функция, потому что вы делаете преобразование структуры. Если вы хотели вернуть массив, вы могли бы использовать метод map() .

Кроме того, следите за тем, как ваш базовый сценарий пишет рекурсивные функции. KNS устанавливает лимит рекурсии.

...