“为元组添加”一个值?

时间:2015-03-24 17:46:07

标签: julia

我试图在朱莉娅代表掷骰子。我正在使用

生成n d sides的所有卷
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)或{ {1}}。

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

感谢。

1 个答案:

答案 0 :(得分:3)

元组是不可变的,因此您无法就地修改它们。对其他可变数据结构有很好的支持,因此没有很多方法可以使用元组并返回一个新的,稍微修改过的副本。一种方法是将旧元组的一部分映射到一个新元组,例如,创建一个像现有元组t一样的新元组,但第一个元素设置为5 ,你会写:tuple(5, t[2:end]...)。但这很尴尬,还有更好的解决方案。

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

根据性能的重要程度和您正在做的工作量,创建自己的数据结构可能是值得的。您可以为该类型添加自己的特定方法(例如reroll!)。并且通过利用某些域名限制(例如,如果您只想拥有有限数量的骰子),您可能能够超越一般Array的性能。

相关问题