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.Key ではなく、キーを d にする方法がわかりません。
したがって、問題はここにあります。FlattenedMap = dictionary;
辞書は、最終結果としてプロパティを介して形成された辞書をどのように満たすかという、私<int, List<Node<T>>>
が望むものの代わりになるためです。<Node<T>, List<Node<T>>
アップデート
したがって、私がやろうとしたが、以下の擬似コードでは機能しないのは、d が T 型であり、辞書がキーとして d.Key (T.Key ではなく) ではなく Node を本当に必要とするためです。私は次のようなことをしようとしましたこれ:
var dictionary = parentGroups.ToDictionary(d => new Node<T>(d), d => d.ToList());
実際に考えてみると、List はList<d>
or IList<d>
but List<Node<T>(d)>
or のリストである必要はありません<Node<d>>
(T は d のインスタンスであり、Node は d が確実に持つ INode を実装したインスタンスを期待していることを思い出してください)。
本当にToDictionaryがこれを作成して いる<d.Key, List<d>>
ので(<int, List<d>)
、私の最終的な辞書が期待するものではないという結果になります。
どういうわけか、その ToDictionary で d をその場で Node に変換する必要があるので、Dictionary>... になります.
アップデート
最初に _dependencies をすべての Node インスタンスに変換して、これを簡単に操作できるようにするか、CreateFlattenedMap() で機能させるようにするという点で、何か違うことを試しました
さて、最初に元の依存関係リストを循環させ、それぞれをノード (つまり、Node(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;
}