从现有的层次结构创建不可变的集合结构

Posted

技术标签:

【中文标题】从现有的层次结构创建不可变的集合结构【英文标题】:Creating an immutable collection structure from existing hierarchical structure 【发布时间】:2019-09-13 13:59:59 【问题描述】:

我有一个存储分层数据的对象。我已经成功地从平面结构创建了我需要的结构,但这需要我使用List<>,它不是一成不变的(我想使用IReadOnlyList)。

现在我无法真正理解如何根据这些子列表创建不可变列表。谁能指导我正确的方向?

类如下所示:

public class ItemOrFolder

    public string Id  get; 

    public string Name  get; 

    public List<ItemOrFolder> Children  get; set;     // Need to create immutable versions of these recursively

    private ItemOrFolder(string id, string name)
    
        Id = id;
        Name = name;
    

    public static ItemOrFolder Create(string id, string name)
    
        return new ItemOrFolder(id, name);
    

如果Childrennull,那么它是一个项目,否则它是一个文件夹,包含零个或多个ItemOrFolder

【问题讨论】:

【参考方案1】:

我找不到 Children 属性的设置位置,但您只需将 .ToImmutableList() 添加到您的列表中

item.Children = yourList.ToImmutableList();

【讨论】:

以上是关于从现有的层次结构创建不可变的集合结构的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个完全不可变的树层次结构?建筑鸡和蛋

scala的集合层次结构

Scala 集合中的可变与不可变

具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?

scala 数据结构(七 ):集 Set

scala 数据结构:数据结构简介