所以这是我已经看了很长一段时间了。我无法看到我做错了什么。希望你们能帮忙^^
所以我的问题是我有311个对象,我尝试将其排序为SortedDictionary<int, SortedList<int, Entry>>
(&gt;)。但结果是只有112个对象的字典。剩下的去哪了,为什么不去哪里呢?
public SortedDictionary<int, SortedList<int, Entry>> GetSortedByForum(int id)
{
SortedDictionary<int, SortedList<int, Entry>> result = new SortedDictionary<int, SortedList<int, Entry>>();
foreach (var e in GetByForum(id))
{
e.fk_entry = e.fk_entry == null
? 0
: e.fk_entry;
if (!result.ContainsKey((int)e.fk_entry))
result[(int)e.fk_entry] = new SortedList<int, Entry>();
if (!result[(int)e.fk_entry].ContainsKey(e.fk_language))
result[(int)e.fk_entry][e.fk_language] = new Entry();
result[(int)e.fk_entry][e.fk_language] = e;
}
return result;
}
背景信息可能有所帮助:
entry
只能在父级上,但可以有多个子级。答案 0 :(得分:1)
您的问题出在以下代码行中。它只添加特定语言的第一个条目 - 不添加相同父语言和语言的后续条目。
if (!result[(int)e.fk_entry].ContainsKey(e.fk_language))
result[(int)e.fk_entry][e.fk_language] = new Entry();
保持尽可能多的代码,我想你想要一个集合与每种特定语言相关的条目:
var result = new SortedDictionary<int, SortedList<int, List<Entry>>>();
...
...
if (!result[(int)e.fk_entry].ContainsKey(e.fk_language))
result[(int)e.fk_entry][e.fk_language] = new List<Entry>();
result[(int)e.fk_entry][e.fk_language].Add(e);
鉴于你的评论,“如果我想通过fk_language对不同的翻译进行排序,我该如何做?”,你可以尝试在你的循环中加入这样的东西:
var result2 = new SortedDictionary<int, Dictionary<int, List<int>>>();
if (!result2[(int)e.fk_entry].ContainsKey(e.some_unique_entry_id))
result2[(int)e.fk_entry][e.some_unique_entry_id] = new List<int>();
result2[(int)e.fk_entry][e.some_unique_entry_id].Add(e.fk_language);
或者使用LINQ查询第一个SortedDictionary,将其操作为您需要的格式。