Независимо от того, как я пытаюсь, я не могу создать хороший и чистый алгоритм для выполнения следующих действий:
- System.Array (или универсальный список) data System.Object
- System.Array (или универсальный список) xval System.Object
- System.Array (или универсальный список) idxs System.Int32
xval и idxs содержат одинаковое количество элементов, а idxs не содержит значений меньше нуля или большечем data.Length
Мне нужно вставить все элементы в xval в массив data , где соответствующее целое число в idxs представляет индекс вставки в исходных, не поврежденных данных .
Например:
*data* = {A, B, C, D, E, F, G, H}
*xval* = {U, V, W, X, Y, Z}
*idxs* = {5, 0, 0, 0, 1, 1}
*output* = {V, W, X, A, Y, Z, B, C, D, E, U, F, G, H}
Это достаточно легко сделать, но я всегда получаюнеприличный кодМоя лучшая попытка (но я беспокоюсь об ошибках округления):
idxs.Reverse()
xval.Reverse()
Dim N As Int32 = data.Count + xval.Count
Dim map(N - 1) As Double
Dim output(N - 1) As Object
Dim k As Int32 = -1
For i As Int32 = 0 To data.Count - 1
k += 1
map(k) = i
output(k) = data(i)
Next
For i As Int32 = 0 To xval.Count - 1
k += 1
map(k) = idxs(i) - ((i + 1) * 1e-8)
output(k) = xval(i)
Next
Array.Sort(map, output)