C# 按其他字符串数组顺序排列字符串数组,但长度会有所不同

C# 按其他字符串数组顺序排列字符串数组,但长度会有所不同,c#,arrays,C#,Arrays,所以基本上我有一道彩虹,有红色、橙色、黄色、绿色、蓝色、靛蓝和紫色。让我们把它做成一个数组 var rainbowArray = new string[] {"red", "orange", "yellow", "green", "blue", "indigo", "violet"}; 现在我有了第二个无序数组,它来自数据库。此数组包含: var data

所以基本上我有一道彩虹,有红色、橙色、黄色、绿色、蓝色、靛蓝和紫色。让我们把它做成一个数组

var rainbowArray = new string[] {"red", "orange", "yellow", "green", "blue", "indigo", "violet"};
现在我有了第二个无序数组,它来自数据库。此数组包含:

var databaseArray = new string[] { "yellow", "red", "indigo" }
如何使第二个数组的顺序与第一个数组的顺序相同。我们可以始终假定主第一个数组包含数据库将返回的所有项。

使用Enumerable.OrderBy和array.IndexOf的组合:


这遵循您的断言,即第二个数组中的所有项都将位于第一个数组中。

这不是干净的,但它是有效的:

var rainbowArray = new string[] { "red", "orange", "yellow", "green", "blue", "indigo", "violet" };

var databaseArray = new string[] { "yellow", "red", "indigo" };

List<string> testArray = new List<string>();
foreach(var item in rainbowArray)
{
      if(databaseArray.Contains(item))
      {
         testArray.Add(item);
      }
 }

var endArray = testArray.ToArray();

在您的假设下:我们总是可以假设主第一个数组拥有数据库将返回的所有项

你能行

rainbowArray.Intersect(databaseArray)

哪种方法最好。

请提供所需结果的示例。非常感谢!这正是我想要的,并且非常干净,使用了一个liner.LINQ替代此方法:rainbowArray.WheredatabaseArray.Containers也与此版本类似,但我接受了另一个答案,因为它实际上是排序的。我查阅了intersect文档,但这不是用于排序的,即使它可以像这样使用。非常感谢!确保不为排序而创建Intersect,但它保持原始收集顺序。所以在你的假设下,我提出了这个解决方案。当然,这不是一个普遍的解决办法。仅针对您的具体情况..:
rainbowArray.Intersect(databaseArray)