元组循环在斯卡拉我如何通过阶
val captainStuff = ("One", "Two", "Three", "Four", "Five")
如何我可以循环遍历一个元组?在列表和地图上循环很容易。但是如何通过Tuple循环。
谢谢!
元组循环在斯卡拉我如何通过阶
val captainStuff = ("One", "Two", "Three", "Four", "Five")
如何我可以循环遍历一个元组?在列表和地图上循环很容易。但是如何通过Tuple循环。
谢谢!
你可以将它转换为迭代器,如:
val captainStuff = ("One", "Two", "Three", "Four", "Five")
captainStuff.productIterator.foreach(x => {
println(x)
})
这个问题是一个重复的BTW:
谢谢帕维尔! –
我假设你接受这个答案,所以随时标记为接受:)谢谢 – Pavel
如何我可以循环遍历?在列表和地图上循环很容易。但是如何通过Tuple循环。
列表和地图是集合。元组不是。迭代(又名“循环”)真的只对那些元组没有的集合有意义。
元组是产品类型。它们是将不同类型的多个值组合成单个结构的一种方式。考虑到元组的字段可能有不同的类型,你会如何迭代它呢?元素变量的类型是什么?
如果您熟悉其他语言,你可能熟悉的记录(如帕斯卡RECORD
或struct
在C)的概念。元组有点像他们,除了字段没有名字。如何迭代Pascal中的记录或C中的结构?你不这样做没有意义。
实际上,您可以将对象作为记录。再一次,你如何迭代对象的字段?你不这样做没有意义。
注1:是的,有时候,它不意义的,在一个对象的字段重复IFF你正在做的反射元编程。
注2:在Scala中,元组Product
继承,它具有非类型安全productIterator
方法,给你一个Iterator[Any]
,它允许您遍历一个元组,但没有类型安全。只是不要这样做。
tl; dr:元组不是集合。你只是不要遍历它们。期。如果你认为你必须这样做,那么你做错了什么,即你不应该有一个元组,但可能是一个数组或列表。
嗨JörgW Mittag,谢谢你的好解释。我曾在SQL,ETL工作,但我是新编程。 –
那么,如果你知道SQL,那么你应该设置:SQL是关于(集合)元组的。你“迭代”(实际上,你没有,数据库为你做)超过集(行),但从来没有超过元组。 –
是的,这是正确的。 –
元组可以迭代(请参阅'productIterator'),但它是一个_bad_想法。由于所有元素都变成了“Any”类型,因此您会丢失类型安全性。 – jwvh
如果你发现自己需要“循环”一个元组,那么你可能应该考虑其他数据结构,就像一个序列。 – maasg