3 回答

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上試試這個。

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
將保持不變,所以如果要覆蓋切片,只需將其分配給相同的變量即可。
注意我是在手機上寫的,所以標記和代碼可能不太正確,但這至少應該回答你的問題

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]
- 3 回答
- 0 關注
- 179 瀏覽
添加回答
舉報