2
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;
        }
4

1 回答 1

1

这会做你想要的吗?

var dictionary = parentGroups.ToDictionary(
    d => new Node<T>(d.Key), 
    d => d.ToList());
于 2013-04-01T03:46:38.277 回答