LINQ OrderBy 第一个数组并更新第二个包含索引的数组

LINQ OrderBy the first array AND update a second array holding indexes

给定一个 3 维向量对象数组,以及第二个带有索引的数组,

如何使用 LINQ 对第一个数组进行排序,以便索引数组也得到更新?

例如:

public Vector3[] vectors = new Vector3[]{new Vector3(4,2,2), new Vector3(2,2,2), new Vector3(3,2,2) };

public int[] indexes = new int[]{0,1,2};

vectors = vectors.OrderBy(vector => vector.x); //order the vector3 objects by x-coordinate

最终结果:

(2,2,2),  (3,2,2),  (4,2,2)

然而,这留下了索引,应该更新为:

1, 2, 0

如何解决这个问题? 谢谢!

您的向量和索引之间没有 link,因此无法将它们排序在一起。

与其创建不同的数组,不如尝试这样的操作:

IList<KeyValuePair<int, Vector3>> v = new List<KeyValuePair<int, Vector3>>
{
    new KeyValuePair<int, Vector3>(0, new Vector3(4,2,2)),
    new KeyValuePair<int, Vector3>(1, new Vector3(2,2,2)),
    new KeyValuePair<int, Vector3>(2, new Vector3(3,2,2))
};

那么你所要做的就是排序:

v = v.OrderBy(x => x.Value.x);

您仍然可以通过 v.Select(x => x.Key).ToArray() 访问排序的索引数组,通过 v.Select(x => x.Value).ToArray() 访问向量数组。