如何按日期对IList C#进行排序?

时间:2017-06-07 11:18:39

标签: c# winforms list linq sorting

我有一个IList:

IList[] info = new IList[2];
info[0] = Date;      //List<DateTime> item
info[1] = something; //List<double> item

所以,我想按info中的日期排序info[0]。像那样:

 Date.Sort((a, b) => a.CompareTo(b));

但是当我试图这样做时:

IEnumerable[] sortedEnum = info.OrderBy(info[0].Sort((a, b) => a.CompareTo(b)));

我明白了:

  

&#39; System.Collections.IList&#39;不包含&#39;排序&#39;的定义没有扩展方法&#39;排序&#39;接受类型&#39; System.Collections.IList&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)。

someoene可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我认为这是一个X / Y问题。你正试图解决一个复杂的“排序两个列表,彼此一致”。并且......你可以,但这很难。 Array.Sort有一个合适的方法可以在连接中对两个数组进行排序,但是:不是列表。你可以尝试这样做,但坦率地说,我认为你正在解决错误的问题。如果每个DateTimedouble在逻辑上相连,那么而不是而不是具有两个列表:一个列表具有复合值。例如:

var list = new List<(DateTime when, double value)>();
list.Add((dateX, valueX)); // your values...
list.Add((dateY, valueY));
list.Add((dateZ, valueZ));

list.Sort((x,y) => x.when.compareTo(y.when));

这里我使用的是元组类型,但同样的事情可以通过声明自己的类型来保存复合值。您可能还希望查看预先排序的列表容器类型,但这会对键值(单元等)提出更多要求。

答案 1 :(得分:0)

建立在Marc的

List<(DateTime when, double value) list = info[0].Zip(info[1], (d,v)=> (d,v));

正如磁控管指出的那样,如果你还没有C#7,

var list = info[0].Zip(info[1], (d,v)=> Tuple.Create(d,v));
list.Sort((x,y) => x.Item1.compareTo(y.Item1));