如何遍历 PersistentVector
How to iterate over PersistentVector
我正在使用 near-sdk-as
并且我有这份工作列表:
private jobs: PersistentVector<Job>;
如何遍历作业以便我可以:
- return 以用户友好的格式(即 JSON 或字符串列表)
- 在里面搜索一个元素
NEAR 文档中的此页面解释了所有集合的工作原理及其功能
https://docs.near.org/docs/concepts/data-storage
有了PersistentVector
你就可以
一般来说,所有这些集合都只是键值存储的包装器,这意味着您可以编写自己的。
如果您能想象一个缺失的数据结构,我们几乎肯定很乐意资助您构建一个。查看 https://near.university/teach 通过赠款、奖学金等做出贡献的机会
只是为了补充@amgando 的回答,这里有一个关于如何做到这一点的例子。示例中有一些重点,我也会写在评论中
- 将@nearBindgen 注释添加到您的 class (
Job
)
- 初始化
PersistentVector
时添加一个唯一前缀(为您的合约)
import { PersistentVector } from 'near-sdk-core';
@nearBindgen // need annotation to serialize the object
class Job {
title: string;
constructor(title: string) {
this.title = title;
}
}
export class Contract {
private jobs: PersistentVector<Job> = new PersistentVector<Job>('jobs'); // Need a unique prefix
addJob(title: string): Job {
const job = new Job(title);
this.jobs.push(job);
return job;
}
getJobs(): Job[] {
const res: Job[] = [];
for (let i = 0; i < this.jobs.length; i++) {
res.push(this.jobs[i]);
}
return res;
}
}
使用上面的代码,当您调用 getJobs()
函数时,您不会修改状态(就像 pop()
函数那样)。
关于你的第二个问题
为了搜索工作,您需要循环向量,并检查是否有任何工作符合工作条件。我不确定在客户端进行这种过滤是否更好(就汽油费而言)。
我正在使用 near-sdk-as
并且我有这份工作列表:
private jobs: PersistentVector<Job>;
如何遍历作业以便我可以:
- return 以用户友好的格式(即 JSON 或字符串列表)
- 在里面搜索一个元素
NEAR 文档中的此页面解释了所有集合的工作原理及其功能
https://docs.near.org/docs/concepts/data-storage
有了PersistentVector
你就可以
一般来说,所有这些集合都只是键值存储的包装器,这意味着您可以编写自己的。
如果您能想象一个缺失的数据结构,我们几乎肯定很乐意资助您构建一个。查看 https://near.university/teach 通过赠款、奖学金等做出贡献的机会
只是为了补充@amgando 的回答,这里有一个关于如何做到这一点的例子。示例中有一些重点,我也会写在评论中
- 将@nearBindgen 注释添加到您的 class (
Job
) - 初始化
PersistentVector
时添加一个唯一前缀(为您的合约)
import { PersistentVector } from 'near-sdk-core';
@nearBindgen // need annotation to serialize the object
class Job {
title: string;
constructor(title: string) {
this.title = title;
}
}
export class Contract {
private jobs: PersistentVector<Job> = new PersistentVector<Job>('jobs'); // Need a unique prefix
addJob(title: string): Job {
const job = new Job(title);
this.jobs.push(job);
return job;
}
getJobs(): Job[] {
const res: Job[] = [];
for (let i = 0; i < this.jobs.length; i++) {
res.push(this.jobs[i]);
}
return res;
}
}
使用上面的代码,当您调用 getJobs()
函数时,您不会修改状态(就像 pop()
函数那样)。
关于你的第二个问题
为了搜索工作,您需要循环向量,并检查是否有任何工作符合工作条件。我不确定在客户端进行这种过滤是否更好(就汽油费而言)。