Julia &引用;加入“;一个元组的值?

Julia &引用;加入“;一个元组的值?,julia,Julia,我试图在《朱莉娅》中代表掷骰子。我正在生成and边的所有卷 sort(collect(product(repeated(1:sides, n)...)), by=sum) 这会产生如下结果: [(1,1),(2,1),(1,2),(3,1),(2,2),(1,3),(4,1),(3,2),(2,3),(1,4) … (6,3),(5,4),(4,5),(3,6),(6,4),(5,5),(4,6),(6,5),(5,6),(6,6)] 然后,我希望能够合理地修改这些元组,以表示诸如在滚动

我试图在《朱莉娅》中代表掷骰子。我正在生成a
n
d
边的所有卷

sort(collect(product(repeated(1:sides, n)...)), by=sum)
这会产生如下结果:

[(1,1),(2,1),(1,2),(3,1),(2,2),(1,3),(4,1),(3,2),(2,3),(1,4)  …  (6,3),(5,4),(4,5),(3,6),(6,4),(5,5),(4,6),(6,5),(5,6),(6,6)]
然后,我希望能够合理地修改这些元组,以表示诸如在滚动中删除最低值或添加常量等,例如,将
(2,5)
转换为
(10,2,5)
(5,)

Julia是否提供了很好的函数来轻松地修改(不一定是就地修改)n元组,或者移动到不同的结构来表示rolls会更简单


谢谢。

元组是不可变的,所以您不能在适当的位置修改它们。对其他可变数据结构有很好的支持,因此没有多少方法可以接受元组并返回新的、稍加修改的副本。一种方法是将旧元组的一部分拆分为一个新元组,例如,要创建一个新元组,就像现有元组
t
一样,但将第一个元素设置为
5
,您可以编写:
tuple(5,t[2:end]…)
。但这很尴尬,还有更好的解决方案

正如Spenceryon2在他的评论中所建议的,一维
数组{Int,1}
是一个很好的起点。您可以查看手册页面,了解可以使用的操作类型;一维数组是可编辑、可索引的,并且支持出列接口


根据性能的重要性和您正在做的工作的多少,创建您自己的数据结构可能是值得的。您可以为该类型添加自己的特定方法(例如,
reroll!
)。而且,通过利用一些域限制(例如,如果您只希望掷有限数量的骰子),您可能能够击败常规
阵列的性能

,我建议使用不同的数据结构。元组没有任何
setindex方法,这是Julia用来修改容器的方法。向量(实际上是
Array{Int,1}
)非常简单,因为您可以使用
push
弹出以添加和删除内容。