首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在motoko中遍历内部数组?

如何在motoko中遍历内部数组?
EN

Stack Overflow用户
提问于 2022-05-13 07:18:16
回答 1查看 55关注 0票数 0

我刚接触过Motoko和网络电脑,当我工作的时候,我遇到了太多的困难,看起来很简单,我在做这件事时遇到了困难,我在这里发布了论坛问题的链接。

https://forum.dfinity.org/t/how-to-traverse-inner-array-of-a-trie/12941?u=manubodhi

如果有人精通Motoko和Dfinity,请帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-13 09:45:10

我在motoko操场为您准备了一个小代码,以了解如何遍历内部数组并实现过滤Trie的目标。以下是motoko操场上保存的项目:https://m7sm4-2iaaa-aaaab-qabra-cai.raw.ic0.app/?tag=1150943578

快速筛选内部数组,您可以使用:

代码语言:javascript
复制
let trieOfDishes = Trie.filter<DishId, Dish>(dishes, func (k, v) {
    Array.find<MealTypeId>(v.mealTypeId, func(x : MealTypeId) { x == mealTypeId }) != null ;
});

全面实施毒气罐守则:

代码语言:javascript
复制
import Trie "mo:base/Trie";
import Array "mo:base/Array";
import Iter "mo:base/Iter";
import Nat32 "mo:base/Nat32";

actor Dishes {
    
    type DishId = Nat32;
    type DishTypeId = Nat32;
    type MealTypeId = Nat32;

    public type Dish = {
        dishId: DishId;
        dishTypeId : DishTypeId;
        mealTypeId : [MealTypeId]
    };

    var dishes: Trie.Trie<DishId, Dish> = Trie.empty();

    private func key(x : DishId) : Trie.Key<DishId> {
        return { hash = x; key = x };
    };
    
    public func add_dish(dish: Dish) : async Dish {
        dishes := Trie.replace(dishes, key(dish.dishId), Nat32.equal, ?dish).0;
        return dish;
    };

    public query func getDishesByDishId (dishTypeId : DishTypeId) : async [(DishId, Dish)] {
       let trieOfDishes = Trie.filter<DishId, Dish>(dishes, func (k, v) { v.dishId == dishTypeId } );
       let arrayOfDishes : [(DishId, Dish)] = Iter.toArray(Trie.iter(trieOfDishes));
       return arrayOfDishes;
    };

    public query func getDishesBymealTypeId (mealTypeId : MealTypeId) : async [(DishId, Dish)] {
       let trieOfDishes = Trie.filter<DishId, Dish>(dishes, func (k, v) {
            Array.find<MealTypeId>(v.mealTypeId, func(x : MealTypeId) { x == mealTypeId }) != null ;
       });
       let arrayOfDishes : [(DishId, Dish)] = Iter.toArray(Trie.iter(trieOfDishes));
       return arrayOfDishes;
    };
    
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72225745

复制
相关文章

相似问题

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