Julia &引用;加入“;一个元组的值?
我试图在《朱莉娅》中代表掷骰子。我正在生成aJulia &引用;加入“;一个元组的值?,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)] 然后,我希望能够合理地修改这些元组,以表示诸如在滚动
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代码>和弹出代码>以添加和删除内容。