[英]How do I sort 2 lists by the same criteria?
public void sort()
{
datelist = new List<DateTime>(rdate); //timedates
intlist = new List <Int>(rint); //integers
datelist.Sort((a, b) => a.CompareTo(b)); //sorts the dates ascending(I think)
}
我有两个初始数组; 这些按索引号匹配。 我已将这些转换为列表以便对它们进行排序。 我如何以与datelist完全相同的方式对intlist进行排序? 谢谢。
假设您有linq(.net 3.5 +),您可以执行以下操作。
// Define your collections
var dates = new[]
{
new DateTime(2012, 1, 1), new DateTime(2012, 1, 2), new DateTime(2012, 1, 5),
new DateTime(2012, 1, 3)
};
var ints = new[] {1,2,4,3};
var result = dates
.Select((d, i) => new {Date = d, Int = ints[i]}) // This joins the arrays based on index
.OrderBy(o => o.Date) // Sort by whatever field you want
.ToArray(); // Return the results an array
// Extract just the dates
dates = result.Select(o => o.Date).ToArray();
// Extract just the ints
ints = result.Select(o => o.Int).ToArray();
不要创建列表; 使用一个带有两个数组参数的静态Array.Sort重载。 该方法使用默认比较器或您提供的比较器,按“keys”数组中的值指定的顺序对两个数组进行排序。
编辑
在重新审视这个答案时,由于最近的一个upvote(谢谢你,upvoter!),我想强调一下,Array.Sort解决方案使用的代码少得多,内存开销/垃圾收集压力也大大减少:
public void sort()
{
Array.Sort(rint, rdate); //sorts both arrays in the order dictated by the ints
}
要么
public void sort()
{
Array.Sort(rdate, rint); //sorts both arrays in the order dictated by the dates
}
在SynXsiS的代码中,您为每个日期/ int对分配一个新的匿名对象,以及另一个用于保存它们的数组(由OrderBy调用返回的OrderedEnumerable专用),以及另一个用于保存它们的数组(ToArray调用,这也许可以省略),然后你两次迭代该数组创建两个阵列。
如果这些性能考虑并不重要(并且很可能不是这些),我仍然会根据更短的代码选择Array.Sort解决方案。
最后,SynXsiS的解决方案将受益于Enumerable.Zip:
result = dates.Zip(ints, (d, i) => new { Date = d, Int = i }).OrderBy(o => o.Date);
dates = result.Select(o => o.Date).ToArray();
ints = result.Select(o => o.Int).ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.