第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何編寫一個(gè)方法來反轉(zhuǎn)任何切片?

如何編寫一個(gè)方法來反轉(zhuǎn)任何切片?

Go
侃侃爾雅 2023-06-26 16:52:12
編寫對“通用”數(shù)組進(jìn)行操作的方法的慣用方法是什么?我有一個(gè)類型數(shù)組:a := make([]int, 0)我想編寫一個(gè)可以對任何類型的數(shù)組進(jìn)行操作的簡單方法:func reverse(a []interface{}) []interface{} {    for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {        a[i], a[j] = a[j], a[i]    }    return a}使用這種方法a = reverse(a)給我?guī)砹藘蓚€(gè)錯(cuò)誤:cannot use a (type []int) as type []interface {} in argument to reversecannot use reverse(a) (type []interface {}) as type []int in assignment
查看完整描述

3 回答

?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

并不是說你現(xiàn)在就可以在生產(chǎn)中使用泛型(截至 2020 年 10 月 2 日),但是對于對即將推出的 go 泛型功能感興趣的人,使用最新的go設(shè)計(jì)草案,你可以編寫一個(gè)泛型函數(shù),reverse如下所示

package main


import (

? ? "fmt"

)


func reverse[T any](s []T) []T {

? ? for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {

? ? ? ? s[i], s[j] = s[j], s[i]

? ? }

? ? return s

}


func main() {

? ? s := []int{1, 2, 3, 4, 5}

? ? s = reverse(s)

? ? fmt.Println(s)

}

輸出:


[5 4 3 2 1]


查看完整回答
反對 回復(fù) 2023-06-26
?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

在泛型出現(xiàn)(很可能被稱為契約)之前,反射和接口是實(shí)現(xiàn)這種泛化的唯一工具。

您可以定義reverse()取值interface{}并使用reflect包對其進(jìn)行索引并交換元素。這通常很慢,并且難以閱讀/維護(hù)。

接口提供了一種更好的方法,但要求您為不同類型編寫方法。看一下這個(gè)sort包,特別是sort.Sort()函數(shù):

func?Sort(data?Interface)

哪里sort.Interface是:

type Interface interface {

? ? ? ? // Len is the number of elements in the collection.

? ? ? ? Len() int

? ? ? ? // Less reports whether the element with

? ? ? ? // index i should sort before the element with index j.

? ? ? ? Less(i, j int) bool

? ? ? ? // Swap swaps the elements with indexes i and j.

? ? ? ? Swap(i, j int)

}

sort.Sort()能夠?qū)?shí)現(xiàn) 的任何切片進(jìn)行排序sort.Interface,任何具有排序算法完成其工作所需的方法的切片。這種方法的好處是,您也可以對其他數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序,而不僅僅是切片(例如鏈接列表或數(shù)組),但通常使用切片。


查看完整回答
反對 回復(fù) 2023-06-26
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

耐心!根據(jù)向該語言添加類型參數(shù)的最新提案草案,您將能夠reverse在 Go 的未來版本中編寫這樣的通用函數(shù):


func reverse[T any](s []T) []T {

    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {

        s[i], s[j] = s[j], s[i]

    }

    return s

}


func main() {

    s := []int{1, 2, 3, 4, 5}

    s = reverse(s)

    fmt.Println(s)

}

游樂場


出于性能原因,您可能希望就地反轉(zhuǎn)切片:


package main


import "fmt"


func reverse[T any](s []T) {

    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {

        s[i], s[j] = s[j], s[i]

    }

}


func main() {

    s := []int{1, 2, 3, 4, 5}

    reverse(s)

    fmt.Println(s)

}

游樂場



查看完整回答
反對 回復(fù) 2023-06-26
  • 3 回答
  • 0 關(guān)注
  • 242 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)