public Dictionary<Node<T>, IList<Node<T>>> FlattenedMap { get; private set; }
private List<Node<T>> _dependencies; (note: these T instances have a NodeId and related ParentNodeId properties in it to work with)
....更多代码,然后:
public void CreateFlattenedMap()
{
var groups = _dependencies.GroupBy(d => d.ParentId); // attempt to groupy the list by ParentNodeId
var dictionary = parentGroups.ToDictionary(d => d.Key, d => d.ToList()); // attempt to flatten out each pair of parent Node<T> instances with their corresponding Parent Node<T>.Children list
FlattenedMap = dictionary;
}
我正在尝试将组转换为字典,但我不希望密钥成为 Id。因为我的 FlattenedMap 有一个 Node 的键,所以不知道该怎么做,ToDictionary
并且键是 d,而不是 d.Key,基本上是为了让这个分配快乐。
所以问题就在这里:FlattenedMap = dictionary;
因为字典最终<int, List<Node<T>>>
不是我想要的,而是<Node<T>, List<Node<T>>
为了满足我希望我的字典如何通过属性形成作为最终结果。
更新
所以我尝试做但不适用于下面的伪代码是因为 d 是类型 T 并且字典确实需要 Node 作为键,而不是 d.Key (不是 T.Key) 我试图做类似的事情这个:
var dictionary = parentGroups.ToDictionary(d => new Node<T>(d), d => d.ToList());
实际上,现在我考虑一下, List 不需要是List<d>
or IList<d>
but List<Node<T>(d)>
or list of <Node<d>>
(请记住, T 是 d 的一个实例,Node 期望任何已经实现了 d 肯定具有的 INode 的实例)。
真的,ToDictionary 正在创建这个: <d.Key, List<d>>
所以你最终(<int, List<d>)
得到的不是我的最终字典所期望的。
不知何故,我需要在 ToDictionary 中即时将 d 转换为 Node,所以我最终得到 Dictionary>...希望我说得对,但你可以理解我想说的话.
更新
所以尝试了一些不同的方法,因为我首先将我的 _dependencies 转换为所有 Node 实例,以尝试使其更易于使用或使其在我的 CreateFlatnedMap() 中工作
现在播种,在循环原始依赖项列表并将它们中的每一个首先转换为节点(换句话说,节点(d))之后,我正在 IList> 列表中尝试使用 GroupBy。
所以现在,虽然同样的问题(这里是我的班级更完整的图片):
public class Tree<T> where T : INode
{
private readonly IList<T> _sourceDependencies;
private readonly List<Node<T>> _nodeDependencies;
public Node<T> RootNode { get; set; }
public Dictionary<Node<T>, IList<Node<T>>> FlattenedMap { get; private set; }
public Tree(T rootNode, IList<T> dependencies )
{
RootNode = new Node<T>(rootNode); //convert the custom type to Node<T> first so we can work with it
_sourceDependencies = dependencies;
_nodeDependencies = ConvertListToNodes(_sourceDependencies);
FlattenedMap();
}
private List<Node<T>> ConvertListToNodes(IList<T> listToConvert)
{
List<Node<T>> nodeList = _sourceDependencies.Select(sourceNode => new Node<T>(sourceNode)).ToList();
}
public void CreateFlattenedMap()
{
var parentGroups = _nodeDependencies.GroupBy(d => d.ParentNodeId);
var dictionary = parentGroups.ToDictionary(d => new Node<T>(d), d => d.ToList());
FlattenedMap = dictionary;
}