【问题标题】:How to loop over two lists at the same time and sort it in c#? [duplicate]如何同时循环两个列表并在c#中对其进行排序? [复制]
【发布时间】:2016-08-18 07:15:16
【问题描述】:

我有两个已经根据日期排序的列表。这两个列表属于不同类型。 但是这两个列表都包含一个日期类型属性。

例如:列表 A 由员工组成,列表 B 由部门组成

例如:

Sample List A:
  {
    { 
      id=1;
      Date=12/7/2016;
      some other data..
    },
    { 
      id=2;
      Date=13/5/2016;
      some other data..
    },
   }



 Sample List B:

  {
    { 
      id=1;
      Date=1/9/2016;
      some other data..
    },
    { 
      id=2;
      Date=19/6/2016;
      some other data..
    },
   }

我需要同时遍历这两个列表以获取基于日期属性排序的结果。

因此,如果最高日期值来自列表 B,则调用一个函数以打印列表 B 中该记录的详细信息。接下来从两个列表中找到下一个最高日期值,现在如果它来自列表 A,则调用一个函数从列表 A 中打印该记录的详细信息。

【问题讨论】:

  • 你已经尝试了什么?
  • SO不是现成的代码服务,请向我们展示您的尝试
  • 我认为这正是你昨天问的same question 并得到了答案
  • 如果您认为您现有的问题措辞不当或需要更好的示例,您应该编辑它,而不是发布包含更新细节的新问题。
  • 如果它是重复的,那么 stackoverflow 应该将这两个问题标记为重复,而不仅仅是一个,所以阅读任何 dup 的人都会知道它是一个 dup 而不会浪费时间回答

标签: c# linq loops foreach


【解决方案1】:

您的问题很模糊,可能您正在寻找Concat: 让BaseAB 成为基类、共享接口等,其中包含 至少Date属性

   List<ClassA> A = ...
   List<ClassB> B = ...

   var result A
     .Concat<BaseAB>(B)
     .OrderByDescending(item => item.Date);

   foreach (var item in result) {
     var itemA = item as A;

     if (itemA != null) {
       ... 
     }
     else {
       var itemB = item as B;  
       ...  
     } 
   }

在(丑陋的)情况下,AB 没有任何共同之处,您可以使用人工的 Tuple&lt;DateTime, Object&gt; 表示:

var result = ListA
   .Select(item => new Tuple<DateTime, Object>(item.Date, item))
   .Concat(ListB
      .Select(item => new Tuple<DateTime, Object>(item.Date, item)))
   .OrderByDescending(tuple => tuple.Item1)
   .Select(tuple => tuple.Item2);

【讨论】:

  • 谢谢。 Tuple 中的这个对象是什么?另外我怎样才能遍历这个结果?
  • @Shafeek:Tuple&lt;DateTime, Object&gt; 中的对象,(准确地说是tuple.Item2)是ListAListB 的项目(Object,因为AB 没有共同点);所以你的结果为IEnumerable&lt;Object&gt;,并且可以使用与上述情况相同的foreach
  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2023-02-26
  • 2019-08-01
  • 2021-12-10
  • 1970-01-01
  • 2013-07-20
  • 2019-12-03
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多