我有两张清单。
List A List B
a 10
b 5
c 20
我必须对列表B 升序进行排序。 根据列表B,列表A也应重新排序。所以我的结果将是这样的
List A List B
c 20
a 10
b 5
我在这里使用Linq(orderby)。面对排序其他列表的问题。我怎么能这样做?
答案 0 :(得分:3)
一种方法是
List<string> listA = new List<string> { "a", "b", "c" };
List<int> listB = new List<int> { 10, 5, 20 };
var joined = listA.Select((value, index) => Tuple.Create(value, listB[index]));
List<string> orderedListA = joined.OrderByDescending(t => t.Item2)
.Select(t => t.Item1)
.ToList();
编辑:我错过了Zip方法。这条线
var joined = listA.Select((value, index) => Tuple.Create(value, listB[index]));
可以写成
var joined = listA.Zip(listB, (s,i) => Tuple.Create(s,i));
答案 1 :(得分:1)
如何使用Zip
运算符:
List<char> unsortedA = ...
List<int> unsortedB = ...
var orderedTuples = unsortedA.Zip(unsortedB, Tuple.Create)
.OrderByDescending(tuple => tuple.Item2)
.ToList();
// If required:
var sortedA = orderedTuples.ConvertAll(tuple => tuple.Item1);
var sortedB = orderedTuples.ConvertAll(tuple => tuple.Item2);
另一方面,看起来您应该使用元组类型将字符和索引存储在一起,而不是基于索引“关联”它们。
答案 2 :(得分:1)
使用.Net 4.0 Zip和匿名类型
b.Zip(a, (x,y)=>new {Key=x, Value=y}).
OrderBy(x=>x.Key).
Select(x=>x.Value).
ToList()