合并两个集合,保留排序顺序,然后以交错格式显示

本文关键字:然后 顺序 显示 格式 排序 保留 集合 两个 合并 | 更新日期: 2023-09-27 18:15:35

我需要组合两个不同的集合,并以交错格式将它们显示在一起。

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第三条新闻

合并两个集合,保留排序顺序,然后以交错格式显示

您可以让您的CombinedList包含包含两个值的类,事件日期和新闻日期。例如:

var combinedList = NewsList.Zip(EventList, 
    (first, second) => { return new {EventDate = first, NewsDate = second}; });
int i = 1;
foreach (var x in combinedList)
{
    Console.WriteLine($"Event {i}: {x.EventDate}");
    Console.WriteLine($"News {i}: {x.NewsDate}");
    ++i;
}

假设EventListNewsList具有相同数量的项目。如果一个比另一个长,那么这些额外的项将丢失。