Нужна помощь с алгоритмом разрешения индекса через зазубренный массив

Ага! Я знаю, что в конце концов получу это, но на данный момент я уже почти 2 часа занимаюсь этим и все еще застрял.

Мне нужно разрешить отдельные индексы для каждого «уровня» неровного массива для определенного места. Это сложно объяснить, но если вы представите трехуровневый зубчатый массив с длиной [2,3,4]. Если бы вы затем сгладили это в один массив, он имел бы размер 24. Теперь предположим, что вам нужно найти индексы (по одному для каждого уровня зазубренного массива), которые были бы равны индексу одного массива. 22. Было бы 1,2,1. Нетрудно разобраться в единственном сценарии, но я пытаюсь выяснить, каков алгоритм разрешения этих значений для массива с зубцами переменной глубины.

Вот простой пример кода моей текущей попытки:

using System;

class Program
{
    static void Main(string[] args)
    {
        //  Build up the data and info about level depth
        int[] levelDepth = new[] { 2, 3, 4 };
        int[][][] data = new int[][][]
        {
            new int[][] { new int[4], new int[4], new int[4] },
            new int[][] { new int[4], new int[4], new int[4] }
        };

        int requestedValue = 22;
        float temp = requestedValue;

        //  Store the index of each level array to get to the index 
        //  for the requested value
        int[] levelIndexes = new int[3] { 0, 0, 0 };

        //  The following does not work!
        int i = levelDepth.Length;
        while (i > 0)
        {
            temp = temp / levelDepth[i - 1];
            levelIndexes[i - 1] = (int)Math.Round(temp);

            i--;
        }
    }
}

Он работает неправильно, хотя ПОЧТИ дает мне то, что мне нужно, но я думаю, что это может быть удачей. Я подозреваю, что это обычная проблема, которую уже решали раньше, просто у меня нет опыта, чтобы в ней разобраться. : (

Кроме того, прежде чем кто-либо скажет мне, что использование таких массивов ужасно или «почему бы вам не хранить свои данные вот так?» - Приведенное выше описание и код имитируют расположение некоторых микросхем декодера на нашем оборудовании, а я необходимо разработать способ разрешения пути к конкретному графу каскадных микросхем; приведенный выше пример точно соответствует схеме расположения микросхем. Я застрял на нем.

5
задан Steve K 24 August 2011 в 07:59
поделиться