【发布时间】:2016-04-28 17:56:23
【问题描述】:
我有一个列表,我想按另一个序列列表排序。
List<string> Source = new List<string>() { "A" ,"B" ,"C" ,"D" ,"E" ,"F" ,"G" };
List<int> Sequence = new List<int>(){ 2, 1, 3, 5, 4, 6, 7 };
我怎样才能得到新的列表,这样我的结果就像
List<string> Output = new List<string>(){ "B" ,"A" ,"C" ,"E" ,"D" ,"F" ,"G" };
附:我可以使用下面的代码来得到结果。但是我想学习另一种方法。
private List<string> ArrangeList(List<string> i_lsData, List<int> i_nSequence)
{
List<string> lv_lsTempList = new List<string>();
foreach(int Temp in i_nSequence)
{
lv_lsTempList.Add(i_lsData[Temp]);
}
return lv_lsTempList;
}
【问题讨论】:
-
学习使用类而不是多个相关的集合。
-
private List<string> ArrangeList(List<string> i_lsData, List<int> i_nSequence) { return i_nSequence.Zip(i_lsData, (k, v) => new { k, v }).OrderBy(k => k.k).Select(k => k.v).ToList(); } -
序列为
{ 2, 3, 1, 5, 4, 6, 7 }的结果是什么? -
看来这个问题可以用两种方式来解释。值“2”作为
Sequence的第一个元素是否意味着结果应该首先包含Source列表中的第二个元素?或者这是否意味着Source的第一个元素应该在结果列表中排在第二位?