首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ArrayBuffer将所有字段复制到第一个N个条目的另一个ArrayBuffer中

ArrayBuffer将所有字段复制到第一个N个条目的另一个ArrayBuffer中
EN

Stack Overflow用户
提问于 2022-08-14 19:14:44
回答 2查看 82关注 0票数 0

这样做是可行的:

代码语言:javascript
运行
复制
import scala.collection.mutable.ArrayBuffer
case class Z (a1:String, b1:String, ts1: Integer)

var d = new ArrayBuffer[Z]()  // empty buffer is created
d = ArrayBuffer(Z("Mark", "Hamlin", 2), Z("Kumar", "XYZ", 3), Z("Tom", "Poolsoft", 4)) 

//val g = d1.map(x => (x.a1, x.b1, x.ts1)) 
var Z1 = new ArrayBuffer[Z]()
for (x <- d) {
  Z1 += Z(x.a1, x.b1, x.ts1) 
}
println(Z1) 

我如何在循环中克隆Z的条目而不必指定case类Z的所有字段名?Z(x.a1, x.b1, x.ts1)看不到这一点。我想单独做这件事是有原因的。

copyToArray和克隆人似乎不在这里。如果我也能用一个尺寸的话,我会很高兴的,但是我对这个主要的问题很感兴趣。

我看了这个scala ArrayBuffer remove all elements with a predicat,但是我没有过滤器可以使用。我需要,比方说,首先要复制N。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-14 20:37:52

回答“如何在循环中克隆Z的条目而不必指定case类Z的所有字段名?”:

如果您真的想为每个Z创建一个新实例,您可以这样做:

代码语言:javascript
运行
复制
for (x <- d) {
  Z1 += x.copy()
}

但是:当然,你不需要这样做。您的Z-objects在ArrayBuffer中是不可变的,因此没有理由复制它们(没有人可以修改它们.)。相反,只需将相同的实例添加到复制的缓冲区中:

代码语言:javascript
运行
复制
for (x <- d) {
  Z1 += x
}

因为每个x都是不可变的,所以不应该有区别(但是第二个选项为垃圾收集器节省了一些工作,因为分配的对象较少)。

票数 1
EN

Stack Overflow用户

发布于 2022-08-15 10:31:56

不要使用vars、可变集合和数组。这不是用scala编写代码的方式。也要避免过程循环。

代码语言:javascript
运行
复制
val d = Seq(Z("Mark", "Hamlin", 2), Z("Kumar", "XYZ", 3), Z("Tom", "Poolsoft", 4)) 
val d1 = d.take(2) // copies first two elements from d to d1
val d2 = d.drop(2) // removes first two elements from d and assigns the rest to d2

// or do both take and drop at once:
val (d1, d2) = d.splitAt(2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73354466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档