#go #slice
#Вперед #срез
Вопрос:
Можно ли инициализировать фрагмент со всеми 1, как в python?
PYTHON:
onesArray = np.ones(5)
onesList = [1]*5
GOLANG
onesSlice := make([]int, 5)
for i:= 0; i < len(onesSlice); i {
onesSlice[i] = 1
}
Можно ли сделать лучше, чем это?
Ответ №1:
Да, но вы должны использовать другой синтаксис.
oneSlice := []int{1, 1, 1, 1, 1}
Это называется «составной литерал»
Кроме того, если есть причина для повторения (например, вычисления переменной цикла на основе значений или чего-то еще), вы можете использовать range
ключевое слово, а не старую школу, для i равно, i меньше, чем, i цикл.
for i := range onesSlice {
onesSlice[i] = 1
}
Комментарии:
1.
len(oneSlice)
==cap(oneSlice)
2. Я хочу создать фрагмент, содержащий
n
копии integerval
. Есть ли более простой способ, чем цикл? Например, на C я могу сделатьvector<int> a(n, val)
.3. Начиная с 1.16, в Go нет простого способа. Было бы неплохо, если бы вы могли написать, например
make_init([]int, N, INIT_VAL)
, могли бы создать фрагмент N раз INIT_VAL (с емкостью N).