我有一个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可以帮助我吗?
答案 0 :(得分:2)
我认为这是一个X / Y问题。你正试图解决一个复杂的“排序两个列表,彼此一致”。并且......你可以做,但这很难。 Array.Sort
有一个合适的方法可以在连接中对两个数组进行排序,但是:不是列表。你可以尝试这样做,但坦率地说,我认为你正在解决错误的问题。如果每个DateTime
和double
在逻辑上相连,那么而不是而不是具有两个列表:一个列表具有复合值。例如:
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));