我有list1
这样:
{A,B,C,D,E,F}
我有另一个list2
,list2
计数与list1
计数相等(6 = 6):
{50,100,14,57,48,94}
我想根据list1
排序list2
,list2
按升序排序。
{14,48,50,57,94,100}
结果:
{C,E,A,D,F,B}
我使用了以下代码。但结果没有排序
list1= list1.OrderBy(d => list2.IndexOf(d)).ToList();
答案 0 :(得分:4)
为什么不使用排序字典?
var list1 = new List<int> { 50, 100, 14, 57, 48, 94 }
var list2 = new List<string> { "A", "B", "C", "D", "E", "F" };
var dict = new SortedDictionary<int, string>();
for (int i = 0; i < list1.Count; i++)
{
dict.Add(list1[i], list2[i]);
}
您现在可以按正确的顺序访问这些值。
答案 1 :(得分:4)
您可以使用Enumerable.Zip
进行组合,然后使用OrderBy
订购
将指定的函数应用于两个序列的相应元素,生成结果序列。
var first = new List<char>() { 'A', 'B', 'C', 'D', 'E', 'F' };
var second = new List<double>() { 50, 100, 14, 57, 48, 94 };
var results = first.Zip(second, (f, s) => (first: f, second: s))
.OrderBy(x => x.second)
.Select(x => x.first);
Console.WriteLine(string.Join(", ", results ));
输出
C, E, A, D, F, B
答案 2 :(得分:2)
如果您使用数组而不是列表,则可以直接执行此操作:
string[] list1 =
{
"A", "B", "C", "D", "E", "F"
};
int[] list2 =
{
50, 100, 14, 57, 48, 94
};
Array.Sort(list2, list1);
Console.WriteLine(string.Join(", ", list1)); // C, E, A, D, F, B
提供Array.Sort(Array keys, Array items)
方法是为了这个目的。
使用每个键的IComparable实现,根据第一个数组中的键对一对一维Array对象(一个包含键,另一个包含相应的项)进行排序。
可悲的是,List<T>
没有相应的内容。
答案 3 :(得分:0)
试试这个:
int index = 0;
list1 = list1.OrderBy(d => list2[index++]).ToList();
如果给出以下两个列表,它应该产生预期的结果:
List<string> list1 = new List<string> { "A", "B", "C", "D", "E", "F" };
List<int> list2 = new List<int> { 50, 100, 14, 57, 48, 94 };
答案 4 :(得分:0)
试试这个:
docs = docs.OrderBy(d => docsIds.IndexOf(d.Id)).ToList();
应该给出预期的结果。