2017-09-22 19 views

答えて

3

これは適切な方法です。

Inでは、負のインデックスを使用できないため、最後の要素のインデックスはlen(data) -1です。

Go append()は、組み込み関数であり、スライスのメソッドではなく、拡張スライスが必要な場合に割り当てたり保存したりする必要がある新しいスライス値を返します。一般に。

独自の型を作成する場合は、その型をシンプルにするメソッドを追加することができます。たとえば、次の

それを使用して
type ints []int 

func (i *ints) append(es ...int) { 
    *i = append(*i, es...) 
} 

func (i *ints) appendLast() { 
    *i = append(*i, (*i)[len(*i)-1]) 
} 

is := ints{1, 2, 3} 
fmt.Println(is) 

is.append(4, 5) // Append some elements 
fmt.Println(is) 

is.append(is[len(is)-1]) // Append last element explicitly 
fmt.Println(is) 

is.appendLast() // Append last element using appendLast method 
fmt.Println(is) 

// You can also use it for []int values, with conversion: 
is2 := []int{1, 2, 3} 
(*ints)(&is2).appendLast() 
fmt.Println(is2) 

は出力(Go Playground上でそれを試してみてください):

[1 2 3] 
[1 2 3 4 5] 
[1 2 3 4 5 5] 
[1 2 3 4 5 5 5] 
[1 2 3 3] 

ます。また、新しいタイプを作成することなく、簡単なutilの機能を使用することができます。

func appendLast(i []int) []int { 
    return append(i, i[len(i)-1]) 
} 

func appendLast2(i *[]int) { 
    *i = append(*i, (*i)[len(*i)-1]) 
} 

func main() { 
    is := []int{1, 2, 3} 
    fmt.Println(is) 

    is = appendLast(is) 
    fmt.Println(is) 

    appendLast2(&is) 
    fmt.Println(is) 
} 

出力(Go Playground上でそれを試してみてください):

[1 2 3] 
[1 2 3 3] 
[1 2 3 3 3] 
1

data = append(data, data[len(data) - 1])

はい。 Goで行うのが最善の方法です。 Goで負のインデックスを使用することはできません。

関連する問題