несколько случайных элементов из списка одновременно - PullRequest
0 голосов
/ 09 мая 2018

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

Вторая проблема: я хочу получить элемент uniq из списка, например, если я получу 08, этот код необходимо удалить из списка и получить чистую случайную исключающую строку 08.

это мой фактический код:

    package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    // Won't work on the Playground since the time is frozen.
    rand.Seed(time.Now().Unix())
    reasons := []string{
        "01","02","03","04", "05", "06", "07", "08", "09", "10",
    }
    n := rand.Int() % len(reasons)
    n1 := rand.Int() % len(reasons)
    n2 := rand.Int() % len(reasons)
    fmt.Println("", reasons[n])
    fmt.Println("", reasons[n1])
    fmt.Println("", reasons[n2])
}

мой вывод такой:

 07
 02
 06

каждый раз возвращает мне один и тот же вывод, я хочу быть случайным и уникальным

1 Ответ

0 голосов
/ 10 мая 2018

Чтобы получить уникальный ответ, все, что вам нужно сделать, это удалить существующий ответ из фрагмента. Я собрал что-то вместе, что делает это с помощью функции. Есть более эффективные способы сделать это, но это просто, чтобы увидеть, что происходит.

func main() {
    rand.Seed(time.Now().Unix())
    reasons := []string{
        "01", "02", "03", "04", "05", "06", "07", "08", "09", "10",
    }

    n, reasons := getRandom(reasons)
    n1, reasons := getRandom(reasons)
    n2, reasons := getRandom(reasons)
    fmt.Println("", n)
    fmt.Println("", n1)
    fmt.Println("", n2)
}

func getRandom(reasons []string) (string, []string) {
    n := rand.Int() % len(reasons)
    switch n {
    case 0:
        return reasons[0], reasons[1:]
    case len(reasons) - 1:
        return reasons[n], reasons[:n]
    }
    newSlice := []string{}
    for i, item := range reasons {
        if i != n {
            newSlice = append(newSlice, item)
        }
    }
    return reasons[n], newSlice
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...