向元组“添加”值?

oco*_*or0 3 julia

我试图在 Julia 中代表掷骰子。我正在生成nd的所有卷sides

\n\n
sort(collect(product(repeated(1:sides, n)...)), by=sum)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会产生类似以下内容:

\n\n
[(1,1),(2,1),(1,2),(3,1),(2,2),(1,3),(4,1),(3,2),(2,3),(1,4)  \xe2\x80\xa6  (6,3),(5,4),(4,5),(3,6),(6,4),(5,5),(4,6),(6,5),(5,6),(6,6)]\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,我希望能够合理地修改这些元组来表示诸如删除卷中的最低值或添加常数等之类的事情,例如转换(2,5)(10,2,5)or (5,)

\n\n

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

\n\n

谢谢。

\n

Mat*_* B. 5

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

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

根据性能的重要性以及您正在做的工作量,创建您自己的数据结构可能是值得的。您将能够reroll!为该类型添加您自己的特定方法(例如, )。通过利用一些域限制(例如,如果您只想进行有限数量的骰子掷骰),您可能能够击败一般Array.