【发布时间】:2017-03-13 11:41:02
【问题描述】:
我需要组合两个不同的集合并以交错的格式显示它们。
class Program
{
static void Main(string[] args)
{
var NewsList = new List<DateTime>();
NewsList.Add(new DateTime(2016, 9, 25));
NewsList.Add(new DateTime(2016, 10, 15));
NewsList.Add(new DateTime(2016, 10, 24));
NewsList.Add(new DateTime(2016, 10, 27));
NewsList.Add(new DateTime(2016, 10, 31));
var EventList = new List<DateTime>();
EventList.Add(new DateTime(2016, 10, 31));
EventList.Add(new DateTime(2016, 11, 1));
EventList.Add(new DateTime(2016, 11, 4));
EventList.Add(new DateTime(2016, 11, 5));
EventList.Add(new DateTime(2016, 11, 10));
var CombinedList = EventList.Union(NewsList).OrderBy(i => i);
Display(SortDescending(NewsList), "News List SortDescending - Newsest To Oldest");
Display(SortAscending(EventList), "Event List SortAscending - Oldest To Newest");
DisplayCombined(CombinedList, "ComindedList");
}
/// Displays the list from Oldest -> Newest
static List<DateTime> SortAscending(List<DateTime> list)
{
list.Sort((a, b) => a.CompareTo(b));
return list;
}
/// Displays the list from Newest -> Oldest
static List<DateTime> SortDescending(List<DateTime> list)
{
list.Sort((a, b) => b.CompareTo(a));
return list;
}
static void Display(List<DateTime> list, string message)
{
Console.WriteLine(message);
foreach (var datetime in list)
{
Console.WriteLine(datetime);
}
Console.WriteLine();
Console.ReadLine();
}
static void DisplayCombined(IEnumerable<DateTime> list, string message)
{
Console.WriteLine(message);
foreach (var datetime in list)
{
Console.WriteLine(datetime);
}
Console.WriteLine();
Console.ReadLine();
}
}
正如您将在上面看到的,我尝试使用组合两个列表的联合,这将按 OrderBy 方法设置的升序显示整个组合集合(在本例中为 OrderBy(i => i)) .如果没有明确设置顺序,则默认情况下它将返回所持有的每个项目,首先从 EventsList 然后从 NewsList,同时保持最初为两个列表设置的顺序。
我想显示的是一个交错的列表,所以我从一个列表中获取一个项目,然后从下一个列表中获取一个项目,等等......因此
- 2016 年 10 月 31 日第一个活动项目
- 2016 年 9 月 25 日第一条新闻
- 2016 年 11 月 1 日活动项目
- 2016年10月15日消息
- 2016年11月4日第三期活动项目
- 2016年10月24日第三条新闻
【问题讨论】:
-
Concat在 LINQ 中? -
好吧,你告诉它要按他们订购,所以你要更改订单..
-
是“基于列表索引,列表 1 中的每个项目都应跟随列表 2 中的相应项目吗?”。如果不是,我们如何知道何时将列表 2 中的项目插入到列表 1 的值中,而这些值不是按日期排序的?
-
“合并”是什么意思?它们应该以什么方式结合?你期望的结果是什么?
-
@BugFinder - 如果我从 CombinedList 中删除 Order by,那么它会从事件中获取项目列表,然后从新闻中获取。
标签: c# list sorting collections