C#Linq分拣列表过滤到分拣列表
我有一些代码,在其中我做了一些奇怪的事情,从一个分类列表中获取信息,然后返回到另一个分类列表中。我执行where子句,然后必须将所有KeyValuePairs分别放回新的SortedList中 这不是最有效的方法,或者说是推荐的方法,但我似乎找不到更好的方法 代码如下:C#Linq分拣列表过滤到分拣列表,c#,linq,filter,sortedlist,C#,Linq,Filter,Sortedlist,我有一些代码,在其中我做了一些奇怪的事情,从一个分类列表中获取信息,然后返回到另一个分类列表中。我执行where子句,然后必须将所有KeyValuePairs分别放回新的SortedList中 这不是最有效的方法,或者说是推荐的方法,但我似乎找不到更好的方法 代码如下: SortedList<DateTime, CalendarDay> most_days = new SortedList<DateTime, C
SortedList<DateTime, CalendarDay> most_days =
new SortedList<DateTime, CalendarDay>();
List<KeyValuePair<DateTime, CalendarDay>> days = this.all_days.Where (
n => n.Value.IsRequested || n.Value.IsApproved
).ToList();
foreach (KeyValuePair<DateTime, CalendarDay> kvp in days)
most_days.Add(kvp.Key, kvp.Value);
SortedList最长天数=
新分类列表();
列出天数=此。所有天数。其中(
n=>n.Value.IsRequested | | n.Value.IsApproved
).ToList();
foreach(KeyValuePair kvp,以天为单位)
添加(kvp.Key,kvp.Value);
关于我如何清理这件事有什么想法吗(正如他们所说,少就是多)
谢谢
Jonathan你当然可以删除
ToList
呼叫-这对你一点帮助都没有
您可以像这样简化调用代码:
var dictionary = allDays.Where(n => n.Value.IsRequested || n.Value.IsApproved)
.ToDictionary(x => x.Key, x => x.Value);
var mostDays = new SortedList<DateTime, CalendarDay>(dictionary);
那么调用代码将为:
var mostDays = allDays.Where(n => n.Value.IsRequested || n.Value.IsApproved)
.ToSortedList(x => x.Key, x => x.Value);
我认为这应该是合理有效的,因为在构建过程中,它总是在列表的末尾添加值
(对于完整的作业,您可能希望添加重载以接受自定义键比较器等…请参阅
ToDictionary
)不是对您的问题的直接回答(抱歉!)-更多问题:
- 您是否确实需要将输出设置为
SortedList
- 或者,如果输出是一个
,并且结果的顺序恰好正确,那么您是否能够生存下来IEnumerable
如果在创建了
mostDays
集合之后,您从未打算向该集合添加/插入更多项,那么您显然可以使用var mostDays=allDays.Where(n=>n.Value.IsRequested | | n.Value.IsApproved)创建一个IEnumerable
代码>这就是我喜欢这个网站的原因。快速回答,效果很好,让我感觉自己学到了一些重要的东西。谢谢你,乔恩。
var mostDays = allDays.Where(n => n.Value.IsRequested || n.Value.IsApproved)
.ToSortedList(x => x.Key, x => x.Value);