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提出的另一个问题的回答。