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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在字符串數(shù)組golang上實現(xiàn)刪除范圍?

如何在字符串數(shù)組golang上實現(xiàn)刪除范圍?

Go
呼喚遠方 2022-10-31 17:25:42
如何RemoveRange在 golang 中實現(xiàn)方法?它是 C# 中的一種方法,如下所示我想RemoveRange在我的字符串數(shù)組上實現(xiàn)方法,hashCode并在刪除這些范圍的情況下返回新的修改數(shù)組。func removeRange(hashCode []string, idx int, count int) []string {    var temp []string    for i, s := range hashCode {            fmt.Println(i, s)      // confuse here on what to do    }    return temp}
查看完整描述

3 回答

?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

只需將切片切片 until idx,跳過count元素并將其余元素附加到第一次切片的結(jié)果中:


func removeRange(hashCode []string, idx int, count int) []string {

    return append(hashCode[:idx], hashCode[idx+count:]...)

}

測試它:


s := []string{"0", "1", "2", "3", "4", "5"}

fmt.Println(s)

s = removeRange(s, 1, 2)

fmt.Println(s)

哪些輸出(在Go Playground上嘗試):


[0 1 2 3 4 5]

[0 3 4 5]

注意:上述實現(xiàn)不檢查索引是否有效(是否在范圍內(nèi))。如果沒有,代碼可能會恐慌。如果需要,請?zhí)砑颖匾臋z查。


注意#2:上述實現(xiàn)修改了傳入切片的元素,返回的切片將共享參數(shù)的后備數(shù)組。如果你想避免這種情況,如果你想保持輸入不變并為結(jié)果分配一個新切片,那么這樣做:


func removeRange(hashCode []string, idx int, count int) []string {

    result := make([]string, 0, len(hashCode)-count)

    result = append(result, hashCode[:idx]...)

    result = append(result, hashCode[idx+count:]...)

    return result

}

在Go Playground上試試這個。


查看完整回答
反對 回復 2022-10-31
?
qq_遁去的一_1

TA貢獻1725條經(jīng)驗 獲得超8個贊

在 golang 中,您根本不需要為此提供方法或函數(shù)。Go 切片可以在適當位置進行子切片和附加,這就是您可以快速輕松地從任何切片中刪除子集的方法。

假設您要刪除 2 個元素,從索引 2 開始,您只需編寫:

Sub := append(original [:2], original [4:]...)

演示

這是如何工作的:

  • original[:2]創(chuàng)建從 0 開始的子切片,長度為 2 個元素(因此索引 0 和 1)

  • append因為對于第一部分,我們要添加切片的其余部分,減去我們要跳過/刪除的范圍

  • original[4:]創(chuàng)建另一個子切片,這次從索引 4 開始,并在任何original結(jié)束處結(jié)束。就像我們沒有在第一個子切片中明確提到 0 作為起點一樣,通過在此處不指定元素的數(shù)量,golang 將僅包含切片中的所有剩余元素。

  • ...因為append是一個可變參數(shù)函數(shù)(內(nèi)置,但你明白了),我們需要傳入我們想要附加的每個元素作為新參數(shù)。...運算符擴展子切片并將每個元素作為單獨的參數(shù)傳入。

因為我們將新切片分配給了新變量,original將保持不變,所以如果要覆蓋切片,只需將其分配給相同的變量即可。


注意我是在手機上寫的,所以標記和代碼可能不太正確,但這至少應該回答你的問題


查看完整回答
反對 回復 2022-10-31
?
梵蒂岡之花

TA貢獻1900條經(jīng)驗 獲得超5個贊

我已經(jīng)使用//注釋解釋了代碼,如果沒有注釋,代碼是不言自明的。


package main


import (

    "fmt"

    "os"

)


func RemoveRange(s []string, index, count int) []string {

    sLen := len(s)


    // Similar semantics to match (similar) the behavior of

    // C# implementation

    switch {

    case index < 0, count < 0: // arguments are not valid

        fmt.Fprintln(os.Stderr, "error: argument out of range error")

        return s

    case index+count-1 >= sLen: // range results in exceeding the limit

        fmt.Fprintln(os.Stderr, "error: argument error")

        return s

    }


    // Create a slice p and pre-allocate the size required

    // to store the resultant slice after removing range.

    // Result := s[:] -> s[:index] + s[index+count:]

    // Remove := s[index:index+count-1]

    p := make([]string, 0, sLen-count)

    p = append(p, s[:index]...)

    p = append(p, s[index+count:]...)


    return p

}


func main() {

    s := []string{"0", "1", "2", "3", "4", "5"}

    fmt.Println(s)

    r := RemoveRange(s, 1, 3)

    fmt.Println(r)

}

輸出:


[0 1 2 3 4 5]

[0 4 5]


查看完整回答
反對 回復 2022-10-31
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號