Size: a a a

Язык программирования Julia / Julia programming language

2018 November 15

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Никак не соображу что-то, как мне сделать структуру, у которой одно из полей - массив, но без копирования. Поясню:

y = [1,2,3,4]
x = view(y, 1 : 3)

mutable struct Foo
x :: Array{UInt8}
end

foo = Foo(x)

y[1] = 70
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
При такой операции у поменялся, х поменялся, foo.x остался тем же, а я хочу, чтобы поменялся тоже
источник

AK

Artem Korzhimanov in Язык программирования Julia / Julia programming language
это потому что тип foo.x задан в явном виде и он не совпадает с типом x
источник

AK

Artem Korzhimanov in Язык программирования Julia / Julia programming language
вот так работает
источник

AK

Artem Korzhimanov in Язык программирования Julia / Julia programming language
y = [1,2,3,4]
x = view(y, 1 : 3)

mutable struct Foo
x
end

foo = Foo(x)
y[1] = 70
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Да, получилось, правда я параметризовал по типу еще
источник

AK

Artem Korzhimanov in Язык программирования Julia / Julia programming language
ну там тип x — SubArray{Int64,1,Array{Int64,1},Tuple{UnitRange{Int64}},true}
источник

AK

Artem Korzhimanov in Язык программирования Julia / Julia programming language
если задать тип foo.x в таком же виде, то тоже работает
источник

AK

Artem Korzhimanov in Язык программирования Julia / Julia programming language
а если просто Array{Int64}, то все равно работать не будет
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Ну да, там проще можно:
`
mutable struct Foo{T} where T
x :: T
end
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
AbstractArray{T}
источник
2018 November 17

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Думаю, что AbstractArray{T} будет плохо, потому что абстрактные типы в структурах данных это всегда медленно
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Кстати ещё странная задача возникла, я почти уверен, что в языках программирования что-то на этот счет уже придумали:
есть массив итераторов, мне надо перебрать все мыслимые комбинации этих итераторов
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
если их 2, то можно писать в лоб, типа:

for i1 in arr[1]
for i2 in arr[2]
<  ... >
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
если их три, то уже три вложенных цикла и некрасиво, а если ещё больше, то и вообще никуда не годится. Тем более что количество итераторов может быть разным, и не хотелось бы для каждого из случаев (2, 3, 4, ...) писать отдельную программу
источник

SV

Sergey Volkov in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
если их три, то уже три вложенных цикла и некрасиво, а если ещё больше, то и вообще никуда не годится. Тем более что количество итераторов может быть разным, и не хотелось бы для каждого из случаев (2, 3, 4, ...) писать отдельную программу
Тут можно рекурсивную функцию написать, чтобы не было некрасиво
источник

D

Daria in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
Кстати ещё странная задача возникла, я почти уверен, что в языках программирования что-то на этот счет уже придумали:
есть массив итераторов, мне надо перебрать все мыслимые комбинации этих итераторов
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Точно! Но в последнем IterTools её почему-то нет!
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
В общем, всё верно
Если есть массив итераторов [it1, it2, ...], то для того, чтобы пройтись независимо по каждому итератору и получить все возможные комбинации, надо делать так:

import Base.Iterators
<...>
for ind in product(iterArray...)
<...>
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
без троеточия не работает
источник