Преобразование фрагмента []в карту []с одинаковыми ключами для каждого фрагмента

# #go

Вопрос:

Привет, я пытаюсь преобразовать срез []в карту []с одинаковыми ключами для каждого значения карты.

Пример использования следующий: предположим, вы пытаетесь преобразовать лист excel в карту. Вы знаете столбец заголовка как набор строк. Затем вы получаете строки в формате [][]строка. Чтобы получить карту, вы должны задать значения заголовка для каждого элемента в каждой строке.

Моя текущая реализация заключается в следующем

 package main

import (
    "fmt"
)

func main() {
    header := []string{"first", "second", "third"}
    rows := [][]string{{"1.1", "1.2", "1.3"}, {"2.1", "2.2", "2.3"}, {"3.1", "3.2", "3.3"}}

    length := len(header)

    var values []map[string]interface{}
    for _, row := range rows {
        dict := map[string]interface{}{}
        for i, val := range row {
            if i < length {
                dict[header[i]] = val
            }
        }
        values = append(values, dict)
    }
    fmt.Println(values)
}
 

Перейдите по ссылке на игровую площадку: https://play.golang.org/p/Ags779GVtD7

Проблема здесь заключается в сложности, так как вам приходится перебирать все строки, а затем устанавливать ключи для каждой строки, повторяя цикл.

Был бы признателен за предложения более эффективного способа сделать это.

Ответ №1:

Нет более эффективного способа сделать это. Если вы хотите разместить n элементы на карте, вам придется выполнять O(n) операции. И ваш двойной цикл приводит к n вызову вставки.