标签: slice

如何使用slice方法从数组中获取随机元素并存储它

我有一个数组可以说 array x = A,B,C,D,E

我想使用切片函数从我的数组中取一个随机元素并存储它以供以后在新的var中使用

所以我得到一个新的变量即 var y= x.slice

但是我不想指定它从数组中取出哪个元素,我希望每次我如何随机化切片时它是随机的?

javascript arrays slice

-1
推荐指数
1
解决办法
3041
查看次数

在 Go 中使用 unsafe.Pointer 的恐慌

代码是:

package main

import (
    "fmt"
    "unsafe"
)

type Point struct {
    x int 
    y int 
}

func main() {

    buf := make([]byte, 50) 
    fmt.Println(buf)
    t := (*Point)(unsafe.Pointer(&buf))
    t.x = 10
    t.y = 100 
    fmt.Println(buf)
}
Run Code Online (Sandbox Code Playgroud)

运行它时,会发生运行时恐慌:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0xa pc=0x43dd4d]
Run Code Online (Sandbox Code Playgroud)

为什么?

pointers unsafe go slice

-1
推荐指数
1
解决办法
576
查看次数

如何将 int slice 字符串转换为 int slice?

例如输入:(类型:string

"[156, 100, 713]"
Run Code Online (Sandbox Code Playgroud)

示例转换:(类型:切片int

[156, 100, 713]
Run Code Online (Sandbox Code Playgroud)

string go slice

-1
推荐指数
2
解决办法
6331
查看次数

如何在 golang 中创建具有动态长度而不是切片的数组?

例如:我想使用反射将切片的数据作为数组来操作它。

func inject(data []int) {
    sh := (*reflect.SliceHeader)(unsafe.Pointer(&data))
    dh := (*[len(data)]int)(unsafe.Pointer(sh.Data))
    printf("%v\n", dh)
}
Run Code Online (Sandbox Code Playgroud)

此函数将发出编译错误,因为len(data)它不是常量。我该如何解决?

arrays go slice

-1
推荐指数
1
解决办法
1893
查看次数

Golang:对接口切片进行排序

我实现了一个界面几何图形,并有一部分 [] 几何图形,

anything := []geometry{
        rect{width: 3, height: 4, name: "rect"},
        circle{radius: 5, name: "circle"},
}
Run Code Online (Sandbox Code Playgroud)

现在我想按名称对切片进行排序,更改切片中元素的顺序。我可以使用 getName 函数来获取名称。排序后,我希望它像切片一样

{circle{radius: 5, name: "circle"},rect{width: 3, height: 4, name: "rect"},}
Run Code Online (Sandbox Code Playgroud)

这是代码

package main

import (
    "fmt"
    "math"
    "sort"
)

type geometry interface {
    area() float64
    perim() float64
    getName() string
}

type rect struct {
    width, height float64
    name          string
}

type circle struct {
    radius float64
    name   string
}

func (r rect) area() float64 {
    return r.width * r.height
}
func …
Run Code Online (Sandbox Code Playgroud)

sorting interface go slice

-1
推荐指数
1
解决办法
2453
查看次数

查找列表中最小的数字

我用 Go 编写了一个程序,可以查找列表中的最小数字并且它可以工作。但是,我不太明白其中的逻辑。您能解释一下它是如何工作的吗?

package main

import "fmt"

func main() {
    x := []int{
        48, 96, 86, 68,
        57, 82, 63, 70,
        37, 34, 83, 27,
        19, 97, 9, 17,
    }

    for i, num := range x {
        if num < i {
            fmt.Println(num)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场:https://play.golang.org/p/Awuw2Th1g2V

输出:

9
Run Code Online (Sandbox Code Playgroud)

我教科书上的解决方案是不同的,我理解其中的逻辑。

arrays go slice

-1
推荐指数
1
解决办法
4525
查看次数

如何连接两个切片或两个向量,仍然可以访问原始值?

我有两个切片或向量,我想添加它们,如Golang所示:

a := []byte{1, 2, 3}
b := []byte{4, 5, 6}
ab := append(a, b...)
ba := append(b, a...)
Run Code Online (Sandbox Code Playgroud)

我怎么能在Rust那样做呢?我发现了一些其他问题,例如:

但是,他们所有的最佳答案都是a += b,而不是ab = a + b.

let mut a = vec![1, 2, 3];
let mut b = vec![4, 5, 6];

a.append(&mut b);

assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, []);
Run Code Online (Sandbox Code Playgroud)

或者是否有类似Vec::append(a, b)Rust 的功能?

vector append slice rust

-1
推荐指数
2
解决办法
524
查看次数

如何将结构作为参数传递给函数

我怎么能做这样的事情?

我试图将 astruct作为参数传递给Go 中的函数。

func handleEntityProperties(w http.ResponseWriter, r *http.Request) {
    const sliceSize = 100
    var entityProperties struct {
        Instance string `json:"instance"`
        Entities []struct {
            Id         string            `json:"id"`
            Properties map[string]string `json:"properties"`
            Type       string            `json:"type"`
        } `json:"entities"`
    }

    body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        panic(err)
    }

    if !json.Valid([]byte(body)) {
        fmt.Fprintf(w, "invalid json")
        return
    }

    err = json.Unmarshal(body, &entityProperties)

    sendData(entityProperties.Entities[0:100])

    return
}

func sendData(entities struct) {
    log.Println("Doing things with entities ", entities)
}
Run Code Online (Sandbox Code Playgroud)

正如您在代码中看到的,我试图将 的前 100 个元素发送entityProperties.Entities …

json struct types go slice

-1
推荐指数
1
解决办法
139
查看次数

基于插入顺序的切片顺序保证

这是一个非常微不足道的问题,但我在这里找不到它。对不起,如果我错过了。

我可以计算切片中的顺序始终是该切片中元素的插入顺序吗?我使用以下代码对其进行了测试:

func main() {
    for i := 0; i < 10000; i++ {
        testOrder()
    }
}

func testOrder() {
    sl := []int{}
    for i := 0; i < 50; i++ {
        sl = append(sl, i)
    }
    for i, el := range sl {
        if el != i {
            panic("Order not quaranteed")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用数字填充切片,然后检查切片中元素的顺序是否与它们在其中填充的顺序相同。我做这个检查 10000 次。

go slice

-1
推荐指数
1
解决办法
144
查看次数

改变作为参数传递给 Go 中函数的切片

我编写了一些代码,其中函数f将切片s作为参数并修改它而不返回它。

由于切片可以被视为对底层数组的引用,因此我认为切片实际上会在该函数的范围之外进行修改,但事实并非如此。

下面的代码就是一个例子(https://play.golang.org/p/Y5JUmDtRXrz)。

package main

import (
    "fmt"
)

func pop(s []int) int {
    first, s := s[0], s[1:]
    return first
}

func main() {
    s := []int{0, 1, 2, 3}
    first := pop(s)
    fmt.Println(first, s)
}
Run Code Online (Sandbox Code Playgroud)

pop(s)实际上返回0,这是预期的。但在输出中s仍然有0第一个元素。

0 [0 1 2 3]

Program exited.
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何解决这个问题?

go slice

-1
推荐指数
1
解决办法
2932
查看次数

标签 统计

slice ×10

go ×8

arrays ×3

append ×1

interface ×1

javascript ×1

json ×1

pointers ×1

rust ×1

sorting ×1

string ×1

struct ×1

types ×1

unsafe ×1

vector ×1