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()
访问向量数组。
给定一个 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()
访问向量数组。