Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
7 / 7 / 1
Регистрация: 24.07.2014
Сообщений: 113
1

Рекурсивная пробежка по массиву; глубина ячеек массива заранее неизвестна

23.10.2014, 12:57. Показов 1956. Ответов 6
Метки нет (Все метки)

Есть массив, его элементами могут быть как данные, так и другие массивы, содержащие в себе массивы, содержащие данные и т.д. Глубина ячеек массива заранее неизвестна. Нужно пройтись рекурсивным методом для извлечения всех значений, в т.ч. номеров массивов в массивах.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private List<string> method(int position)
        {
            
            List<string> listOfData = new List<string>();
            for (int i = position; i < m; i++)
            {
                listOfData.Add(value[i]); /// записываем значения
                
                
                if (value[i] is *массив*)
                {
                    
                    method(++i);
                }
            }
 
           return listOfLayers;
        }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2014, 12:57
Ответы с готовыми решениями:

как сделать подчиненные таблицы когда глубина массива заранее неизвестна?
есть номенклатура склада , но у одних едениц ьхранения пара идентификационных признаков, а у других...

Создание в базе данных таблиц, структура которых заранее неизвестна
Всем добрый вечер. Очень нужна помощь в решении следующей проблемы. Есть документ xml, который...

Есть ли возможность инициализировать многомерный массив, если его размерность заранее неизвестна?
Теоретический вопрос: есть ли возможность инициализировать многомерный массив, если его размерность...

В файле 1.pas дана матрица , причем ее размерность заранее неизвестна. Записать в другой файл строку, составленную из количеств положительных элемен
В файле 1.pas дана матрица , причем ее размерность заранее неизвестна. Записать в другой файл ...

6
548 / 316 / 138
Регистрация: 08.02.2013
Сообщений: 609
23.10.2014, 13:14 2
Aloe_Sharpist, циклы есть? обход в каком порядке нужен?
1
7 / 7 / 1
Регистрация: 24.07.2014
Сообщений: 113
23.10.2014, 13:22  [ТС] 3
rRczZZ, циклы есть, обход по порядку, можно даже псевдокод, у меня трудности с построением логики)
0
548 / 316 / 138
Регистрация: 08.02.2013
Сообщений: 609
23.10.2014, 13:27 4
Aloe_Sharpist, по порядку в ширину или в глубину?)
1
7 / 7 / 1
Регистрация: 24.07.2014
Сообщений: 113
23.10.2014, 13:37  [ТС] 5
rRczZZ, Элемент 0: значение или массив? Если массив -> добавляем в результирующий List "элемент 0 - массив", если нет, "элемент 0: 'значение' " . Если массив -> идем глубже и т.д. Важно только получить значения всех элементов
0
548 / 316 / 138
Регистрация: 08.02.2013
Сообщений: 609
23.10.2014, 14:13 6
Лучший ответ Сообщение было отмечено Aloe_Sharpist как решение

Решение

Aloe_Sharpist, если вы строите именно "пути" в графе, то циклы сложно обрывать. Другой вариант - вывести все уникальные значения, их индексы это индексы в результирующем списке, если нужен парный индекс "глубина - индекс", то можно завести структуру соотв. и добавлять ее в список результатов (а не объект).

Вот пример поиска уникальных объектов, будьте аккуратны с value-типами
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private static void Trav(Object Obj, HashSet<Object> Completed, List<Object> Result)
{
    if (Obj == null || Completed.Contains(Obj))
        return;
 
    Completed.Add(Obj);
 
    if (Obj as IEnumerable == null) // as Array
    {
        Result.Add(Obj);
        return;
    }
 
    foreach(Object obj in Obj as IEnumerable)
    {
        Trav(obj, Completed, Result);
    }
}
 
public static  List<Object> Trav(Object Obj)
{
    List<Object> r = new List<object>();
    Trav(Obj, new HashSet<Object>(), r);
    return r;
}
 
static void Main()
{
    List<Object> obj = new List<Object> { 1, 2, new int[] { 4, 5, 6 } };
    obj.Add(obj);
    List<Object> l = Trav(obj);
    for (int i = 0; i < l.Count; i++)
        Console.WriteLine("{0}: {1}", i, l[i]);
 
    Console.ReadLine();
}
1
7 / 7 / 1
Регистрация: 24.07.2014
Сообщений: 113
23.10.2014, 14:18  [ТС] 7
rRczZZ, благодарю, буду разбираться)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 14:18

Подсчет суммы заранее неизвестного количества ячеек
Здравствуйте. Есть задача такая: Необходимо из листа АСУТПиМ перенести на лист МатерХРиГСМ данные...

Как присвоить массиву значения из ячеек и наоборот?
как присвоить массиву значения из ячеек и наоборот ?

ПОИСК под диапазону ячеек или массиву
Возможно ли для функции ПОИСК искомый текст подпихнуть в виде массива? Задача (см. вложение):...

Глубина массива
Как определить глубину массива? Имеется массив: $mass = array(&quot;2&quot;, array(&quot;1&quot;,...

При повторном "обращении" к заранее созданному массиву последний элемент отображается неверно
собственно заполняем массив int рандомом через функцию (ну в задании указано - заполнить через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.