我想在指定值之前剪切一個(gè)整數(shù)數(shù)組,并返回一個(gè)包含這些值和數(shù)組中剩余值的數(shù)組。我們可以假設(shè)數(shù)組已排序。這是我到目前為止所擁有的:func cutIntArrBefore(arr1 []int, n int) ([]int, []int) { arr2 := make([]int, 0, len(arr1)) sliceIndex := 0 for i, num := range arr1 { if num < n { arr2 = append(arr2, num) sliceIndex = i } } sliceIndex = sliceIndex + 1 if sliceIndex >= len(arr1) { return arr2, nil } else { arr1 := arr1[sliceIndex:] return arr2, arr1 }}測(cè)試代碼:func main() { var arr1, arr2, arr3 []int arr1 = []int{1,2,3,4,5,6,7,8} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3) arr1 = []int{1,5} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3) arr1 = []int{1} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3) arr1 = []int{5} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3) arr1 = []int{5,6} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3) arr1 = []int{5,5} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3) arr1 = []int{7,7,7} arr2, arr3 = cutIntArrBefore(arr1, 5) fmt.Printf("(%+v) = %+v, %+v\n", arr1, arr2, arr3)}輸出:([1 2 3 4 5 6 7 8]) = [1 2 3 4], [5 6 7 8]([1 5]) = [1], [5]([1]) = [1], []([5]) = [], []([5 6]) = [], [6]([5 5]) = [], [5]([7 7 7]) = [], [7 7]不幸的是,如您所見(jiàn),如果第一個(gè)元素在指定值之后,它將被跳過(guò)。我想盡可能優(yōu)雅地做到這一點(diǎn)。我希望有另一種方法,而不必創(chuàng)建兩個(gè)數(shù)組或添加另一個(gè) if 語(yǔ)句。
查看完整描述