Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何从切片中获取一些唯一的随机项_Arrays_Algorithm_Go_Unique_Slice - Fatal编程技术网

Arrays 如何从切片中获取一些唯一的随机项

Arrays 如何从切片中获取一些唯一的随机项,arrays,algorithm,go,unique,slice,Arrays,Algorithm,Go,Unique,Slice,在此代码中 package main import ( "fmt" "math/rand" ) func main() { rand.Seed(86) items := []string{"aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg"}

在此代码中

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    rand.Seed(86)
    items := []string{"aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg"}
    item1 := items[rand.Intn(len(items))]
    item2 := items[rand.Intn(len(items))]
    item3 := items[rand.Intn(len(items))]
    fmt.Print(item1 + " ")
    fmt.Print(item2 + " ")
    fmt.Print(item3)
    fmt.Println()
}

我想从列表
项目
中获取三个不同的项目。但这种方法有时会返回相同的数据,因为每次都是随机的

bbb ddd ddd
如何获取唯一数据并循环所有模式

比如

aaa bbb ccc
aaa bbb ddd
aaa bbb eee
aaa bbb fff
aaa bbb ggg
bbb ccc ddd
bbb ccc eee
bbb ccc fff
bbb ccc ggg
ccc ddd eee
ccc ddd fff
ccc ddd ggg
ddd eee fff
ddd eee ggg
eee fff ggg

解决方案
使用此选项可以获得所有排列,但其中一些返回相同的数据,只是更改了索引。

不要在rand软件包种子上使用静态值,首先需要阅读以下内容:

Seed使用提供的Seed值将默认源初始化为确定性状态。如果未调用Seed,则生成器的行为与Seed(1)的行为相同。当被2除以1时具有相同余数的种子值生成相同的伪随机序列。与Rand.Seed方法不同,Seed方法对于并发使用是安全的

所以,当您提供init值时,种子是静态值

您需要这样做:

rand.Seed(time.Now().UnixNano())

正确的语言可能会帮助您找到已经存在的答案:您需要切片的随机排列。然而,在你问题的最后,看起来你想要每一个排列,而你不在乎随机性。这是哪一个?此代码将返回随机项,但不能保证所有可能的排列。此外,操场上有一个固定的种子,所以它不是完全随机的。尝试使用
rand.Seed
并在本地运行它。@HymnsForDisco我每次需要3个不同的数据,add要获取切片中的所有图案。这是否回答了您的问题@我在操场上更新了代码。