gpt4 book ai didi

c# - 实现动态 FlatCollection

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:27:39 25 4
gpt4 key购买 nike

我需要创建或使用现有的 .NET FW FlatCollection。我所说的 FlatCollection 是一个 Collection,当通过 Add 方法/函数插入一个元素时,它将检查该元素,如果该元素是 IEnumerable,将从该 IEnumerable 中获取所有元素并将它们添加到收藏。 (此行为仅适用于根 IEnumerable,但是,将其递归地应用于子 IEnumerable 也可能很好,尽管更难)。诀窍在于,这个 FlatCollection 作为一个索引集合,需要保留其元素的顺序。

假设用户向集合中添加了一个包含 3 个元素的 IEnumerable,然后在之后的某个时刻向被引用的集合中添加了一个新元素; FlatCollection 需要注意到列表的大小发生了变化,并更新其内部集合以反射(reflect)新元素,同时保持顺序。因此,例如,如果用户在两个单个元素之间添加一个空集合,然后用 3 个元素填充该集合,则这两个单个元素仍将位于新添加的 3 个元素之前和之后。

当然,我可以通过继承集合并定义所有这些行为来自己实现它,但这很棘手,因为您需要对添加的 IEnumerable 中的项目数进行计数(IEnumerable 没有计数),以及它在集合中的起始索引。想到的第一件事是使用链表作为内部集合,因为你会调整很多大小,但我不确定什么是最好的。

但是,如果有更简单的方法来做到这一点,而不是从头开始实现整个事情,即 I.E.使用现有的 .NET FrameWork 元素 我想知道!因为这是我的问题的目的。

总结一下:我正在寻找实现 FlatCollection 的最佳性能和最简单的方法,可能使用 .NET FW 元素。

最佳答案

这看起来像某种树结构。每个“集合”都是节点,每个节点可以有任意数量的子节点,值是叶子。通过仅按顺序排列叶子,您可以创建所需的“平面”集合。它还以递归方式工作,因此您可以询问任何节点,它会给您正确的“平面子集合”。

关于c# - 实现动态 FlatCollection<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22722810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com