Цикл по двум столбцам, сохранение значения при соблюдении определенного условия [закрыто]

Это решение кода после того, как результаты получены из Mongo. Использование карты для хранения индекса и затем замены значений.

catDetails := make([]CategoryDetail, 0)
err = sess.DB(mdb).C("category").
    Find(bson.M{
    "_id":       bson.M{"$in": path},
    "is_active": 1,
    "name":      bson.M{"$ne": ""},
    "url.path":  bson.M{"$exists": true, "$ne": ""},
}).
    Select(
    bson.M{
        "is_active": 1,
        "name":      1,
        "url.path":  1,
    }).All(&catDetails)

if err != nil{
    return 
}
categoryOrderMap := make(map[int]int)

for index, v := range catDetails {
    categoryOrderMap[v.Id] = index
}

counter := 0
for i := 0; counter < len(categoryOrderMap); i++ {
    if catId := int(path[i].(float64)); catId > 0 {
        fmt.Println("cat", catId)
        if swapIndex, exists := categoryOrderMap[catId]; exists {
            if counter != swapIndex {
                catDetails[swapIndex], catDetails[counter] = catDetails[counter], catDetails[swapIndex]
                categoryOrderMap[catId] = counter
                categoryOrderMap[catDetails[swapIndex].Id] = swapIndex
            }
            counter++
        }
    }
}
0
задан Nitin Bisht 16 January 2019 в 08:58
поделиться

1 ответ

Используя формулу массива, вы можете сделать что-то вроде этого:

enter image description here

Вот как пошаговая оценка формулы (выбор части формулы, а затем нажмите F9, чтобы оценить выбранную часть и заменить на результат:

enter image description here

Умножение массива ИСТИНА / ЛОЖЬ приводит его к массиву 1/0, и это то, что мы передаем в MATCH (), ища первое 1.

0
ответ дан Tim Williams 16 January 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: