Идиоматический способ "слияния" нескольких списков одинаковой длины в F#?

У меня есть несколько списков, каждый из которых содержит 9 чисел с плавающей запятой. Мне нужно создать один новый список, который возьмет первый элемент из каждого списка и сложит их вместе как первый элемент, затем добавит второй элемент из каждого списка как второй элемент, и т.д.

Таким образом, если мои данные выглядят примерно так:

List1 = [a1; b1; c1; d1; e1; f1; g1; h1; i1]
List2 = [a2; b2; c2; d2; e2; f2; g2; h2; i2]
...
Listn = [an; bn; cn; dn; en; fn; gn; hn; in]

Тогда мне нужно создать новый список Listx такой, что

Listx = [a1 + a2 + ... + an; b1 + b2 + ... + bn; ... ]

Количество списков, которые я буду объединять, будет разным (иногда у меня может быть только один список из 9 чисел, а иногда более 100 списков, всегда длиной 9 элементов), поэтому мне интересно, есть ли у кого-нибудь совет по поводу хорошего идиоматического способа сделать это?

Я просмотрел этот вопрос и этот, но оба, похоже, поддерживают промежуточный этап индексирования элементов, а затем использование groupby. Это меня беспокоит, потому что а) у меня есть ощущение, что для моего конкретного случая может быть более элегантное решение и б) производительность может стать проблемой позже - я не хочу оптимизировать преждевременно, но и не хочу прострелить себе ногу.

5
задан Community 23 May 2017 в 12:13
поделиться