を望んで誰かがこれを行うには、より効果的な方法にコメントすることができます結果:私は、ユーザのto-doリストを表し作業項目の一般的なリストを持っています。現在、これはソートされ、唯一の期日までにOboutツリービューで表示され、正常に動作しています。は
これを更新するには、プライマリとセカンダリの "フィルタ"(期限日、受信日など)をそのツリービューに適用することで、ユーザーが予定リストを並べ替えることができるようにしますツリービューには親のソートと子のソートが表示されます。実際のアイテムはそうのように、孫のように表示されます:
Due Date
- Received Date
-- Work Item
-- Work Item
- Received Date
-- Work Item
Due Date
...など
Oboutツリービューには、私の知る限り、いくつかの重要な制限があります。
- 親ノードが必要子孫の前に作成する
- 作成したノードは削除できません
- 他のノード(親、兄弟、子供)が存在するかどうかを確認する方法はありません。ノードがサーバー側で重複しているかどうかをプログラムで判断することはできません。
私はいくつかの古いコードを修正していますので、私の例で穏やかになります。私はそれが何をしているのかを明確にするために多くを取らなければならなかった。
public void generateOboutTreeContent()
{
// Add unique root nodes.
switch (primarySort)
{
[...]
case SortOption.ByDueDate:
addNodesForDueDates(true);
break;
[...]
}
// Then add child nodes for each root node.
switch (secondarySort)
{
[...]
case SortOption.ByReceivedDate:
addNodesForReceivedDates();
break;
[...]
}
// Finally, add all the actual items as grandchildren.
foreach (WorkItem item in WorkQueue)
{
tree.Add(parentID, item.ID, item.url, false);
}
}
private void addNodesForDueDates(bool isRootNode = false)
{
var uniqueNodes = workQueue.GroupBy(i => i.DueDate).Select(group => group.First()).ToList();
foreach (classWorkItem node in uniqueNodes)
{
var dueDate = node.DueDate;
if (isRootNode)
{
tree.Add("root", dueDate, dueDate , false);
}
else
{
tree.Add(parentID, dueDate, dueDate, false);
}
}
}
にはどうすればより効果的に一意の値のために何度も何度もデータセット上で最小限のトラバースと、ジェネリックリストからOboutツリーのルート最初の階層を作成することができますか?
ハードコードされた並べ替えで構造を作成するのは面倒ですが、ユーザー定義の並べ替え(サブクラスやメソッドの爆発なし)をきちんと許す方法でこれをコーディングしようとすると、本当に私は困惑してしまいます。私は全くの提案を聞いてみたい!
ありがとうございます。
参照のwikiの記事します。https://en.wikipedia。org/wiki/Tree_sort – jdweng
@jdweng問題は木とソートの両方に関係していますが、実際には問題は解決しません。 – Servy
はい、そうです。質問は次のとおりです。1)「もっと効果的なやり方を誰かがコメントできると思っていますか?」2)「Oboutツリーのルートファースト階層をジェネリックリストからより効果的に(そしてリンク)は、ツリーソートを行う方法を完全に説明しています。この問題は、ソリューションのコーディングを要求しませんでした。私の質問は、Linqが実際より効率的になるかどうかです。 「通常、LinqはLinq以外のソリューションよりも多くのメモリと処理時間を使います。時間のテストが行われない限り、わかりません。 – jdweng