C# 如何对列表进行排序<;int>;使用另一个列表<;int>;?
我需要使用另一个列表对列表进行排序。 我正在尝试使用:C# 如何对列表进行排序<;int>;使用另一个列表<;int>;?,c#,list,sorting,int,C#,List,Sorting,Int,我需要使用另一个列表对列表进行排序。 我正在尝试使用: var docsIds = new List<int>() { 1, 7, 4 }; var tileSizes = new List<int>(); tileSizes = tileSizes.OrderBy(x => docsIds.IndexOf()); var docsIds=newlist(){1,7,4}; var tileSizes=新列表(); tileSizes=tileSizes.Orde
var docsIds = new List<int>() { 1, 7, 4 };
var tileSizes = new List<int>();
tileSizes = tileSizes.OrderBy(x => docsIds.IndexOf());
var docsIds=newlist(){1,7,4};
var tileSizes=新列表();
tileSizes=tileSizes.OrderBy(x=>docsIds.IndexOf());
输入:1,2,3,4,5,6,7
预计产量:1,7,4,2,3,5,6
非常感谢您的帮助。假设
平铺化
仅具有从docid
中选择的值(这似乎是目的,尽管问题有点不清楚),则缺少的部分是IndexOf()
的一个参数,特别是IndexOf(x)
然后,IndexOf()
哦,对了。而且,OrderBy()
不会返回一个列表,而是一个可枚举的,因此最后需要一个ToList()
。综上所述,你的最后一行应该是
tileSizes = tileSizes.OrderBy(x => docsIds.IndexOf(x)).ToList();
假设tileSizes
只有从docIds
中选择的值(这似乎是目的,尽管问题有点不清楚),那么缺少的部分是IndexOf()
的一个参数,特别是IndexOf(x)
然后,IndexOf()
哦,对了。而且,OrderBy()
不会返回一个列表,而是一个可枚举的,因此最后需要一个ToList()
。综上所述,你的最后一行应该是
tileSizes = tileSizes.OrderBy(x => docsIds.IndexOf(x)).ToList();
我通常更喜欢手工操作,所以我的解决方案是:
List<int> randomItems = new List<int>(){1,2,3,4,5,6,7};
List<int> outputOrder = new List<int>(){0,6,3,1,2,4,5};
List<int> resultList = new List<int>();
foreach(int order in outputOrder)
{
resultList.Add(randomItems[order]);
}
结果是一样的。我通常更喜欢手工操作,所以我的解决方案是:
List<int> randomItems = new List<int>(){1,2,3,4,5,6,7};
List<int> outputOrder = new List<int>(){0,6,3,1,2,4,5};
List<int> resultList = new List<int>();
foreach(int order in outputOrder)
{
resultList.Add(randomItems[order]);
}
结果将是相同的。如果tileSizes
是不同的,并且始终包含所有docsIds
,则可用于O(n)复杂度:
tileSizes = docsIds.Union(tileSizes).ToList(); // { 1, 7, 4, 2, 3, 5, 6 }
如果tileSizes
是不同的,并且始终包含所有docsIds
,则可用于O(n)复杂度:
tileSizes = docsIds.Union(tileSizes).ToList(); // { 1, 7, 4, 2, 3, 5, 6 }
测试输入和预期输出会有帮助,@CodeCaster我不能使用这个:docs=docs.OrderBy(d=>docsIds.IndexOf(d.Id)).ToList();因为我在文档中没有Id。@JoseFrancis输入无法明确它是用于doccsId还是用于tileSizesRead并创建一个。现在还不清楚您到底想要实现什么。测试输入和预期输出会有所帮助,@CodeCaster我不能使用这个:docs=docs.OrderBy(d=>docsIds.IndexOf(d.Id)).ToList();因为我在文档中没有Id。@JoseFrancis输入无法明确它是用于doccsId还是用于tileSizesRead并创建一个。现在还不清楚你到底想要实现什么。我知道这不是最有效的解决方案,但至少你可以设置一个断点,看看发生了什么并控制它。我认为OP希望结果列表根据outputOrder列表进行排序,这意味着它应该是{1,2,14,95,45}
如果列表没有相同数量的值怎么办?@Camilo Terevinto您可以随时输入和编码(一个“如果”),以防止出现这种情况,并在这种情况下做任何您想做的事情。IE一些抛出或错误处理这似乎是对OP提出的不同问题的回答。我知道这不是最有效的解决方案,但至少你可以设置一个断点,看看发生了什么,并控制它。我认为OP希望结果列表根据outputOrder列表排序,这意味着它应该是{1,2,14,95,45}
如果列表没有相同数量的值怎么办?@Camilo Terevinto您可以始终使用和编码(一个“如果”)来防止这种情况,并在这种情况下做任何您想做的事情。这似乎是对OP提出的另一个问题的回答。