Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 11

Циклическое наполнение/удаление элементов массива

26.02.2014, 08:59. Показов 5765. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть вопроса в следующем. Есть массив размером в 21 элемент.
При каждой итерации в массив заносится новый элемент начиная с 0 и до 21. Как только все индексы массива становятся заняты и добавлять новый уже некуда, из массива удаляется самый первый элемент, и добавляется новый элемент в конец массива. И так бесконечно... OnTick() выполняется каждую секунду.
Но почему то через 21 итерацию выдается ошибка:
Crashed in OnTick with IndexOutOfRangeException: Индекс находился вне границ массива.

Что я делаю не так ? Помогите пожалуйста. Я новичок в C#.
Вот мой код:
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
int k = -1, maxTick  =  21;
double[] ticks = new double[21];
 
        protected override void OnTick()
        {
            double Bid = Symbol.Bid;
            double Ask = Symbol.Ask;
            double Point = Symbol.TickSize;
 
               k++;
               ticks[k] = Bid;
 
             if (k == maxTick - 1)
             {
                k--;
                ticks = Delete(ticks.ToList(), 0);
             }
        }
 
        static double[] Delete(List<double> array, int indexToDelete)
        {
            array.RemoveAt(indexToDelete);
            return array.ToArray();
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2014, 08:59
Ответы с готовыми решениями:

Удаление элементов из массива
Кто может помочь с алгоритмом удаления? Вот задание: удалить элементы, значение которых меньше среднего значения всех элементов массива

Удаление элементов из массива
Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения. int n,i,j,k; ...

Удаление элементов массива
Всем доброго времени суток. Мне нужно удалить первые элементы массива до определенного числа. Это нужно сделать в функции: public static...

24
8 / 8 / 6
Регистрация: 14.06.2013
Сообщений: 65
01.03.2014, 15:04
Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
int i=0;
            int[] mass = new int[21];
            for (i=0;i<mass.Length; i++)
            {
                do
                {
                    Int32.TryParse(Console.ReadLine(), out mass[i]);
                    if (Int32.TryParse(Console.ReadLine(), out mass[i]) != true) Console.WriteLine("Entr correct number");
                }
                while (Int32.TryParse(Console.ReadLine(), out mass[i]) != true);
                if (i == mass.Length-1) i = 0;
            }
0
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 11
02.03.2014, 19:43  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Так вы сформулируйте, что же Вам надо... Сначала разговор шел об очереди, то есть первым элемент добавлен - первым и извлечен из очереди. Я Вам привел пример. Он не подходит. Тогда сформулируйте Вашу задачу, как можно более конкретнее...
Мне надо хранить пары элементов в виде: ключ = значение. Ключом является метка времени Unix Timestamp, значением является десятичное число (но можно и целое число, если с ним будет проще я приведу десятичное к целому).

Видимо массив мне не подходит, как уже сказали лучше всего подходит для хранения таких пар, список List.

Заполняется этот список в бесконечном цикле (бесконечный вызов метода каждую секунду). И в этом же цикле при каждой итерации происходит работа с этим списком, то есть перебирается то что уже есть в списке новым циклом и по ключу (метке времени) извлекаются нужные значения, а не нужные (устаревшие) удаляются чтобы не разрастался список.

Извлекаться будет примерно так: если текущая метка времени минус (например 120 секунд) >= метка времени в ключе списка, то берем это первое значение и работаем с ним, все что старше по времени удаляем из списка.

Вот примерно такая реализация мне нужна. Таким образом список будет постоянно пополняться новыми парами в цикле 1, и одновременно на каждой итерации этого цикла будет производиться проверка и удаления старых пар записей из списка.

Массив уже не подходит хотя бы потому что в нем надо указывать размер индекса. А так как у меня индексом будет метка времени которая меняется постоянно, то соответственно постоянно будет получаться ошибка что индекс находится вне границ массива. Как то так.

Вот как это реализовать ?

Добавлено через 23 часа 45 минут
Ну кто поможет с решением ? Неужели решения нет?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.03.2014, 20:35
Так уже не раз говорилось, ну создайте свой класс с нужными параметрами список типа этого класса. В чем проблема?
Вот простой пример, подгоняйте под свою задачу, ничего сложного тут нет...
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
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication31
{
    class Program
    {
        static void Main(string[] args)
        {
            List<MyData> DataList = new List<MyData>();
            for (int i = 0; i < 100; i++)
            {
                DataList.Add(new MyData(new DateTime(2014, 1, 23), i));
                if (i % 2 == 0)
                    DataList.Clear();
            }
            foreach (var item in DataList)
                Console.WriteLine("{0},{1}", item.key, item.val);
            Console.Read();
        }
    }
    class MyData
    {
        public MyData(DateTime dt, int v)
        {
            key = dt;
            val = v;
        }
        public DateTime key
        {
            get;
            set;
        }
        public int val
        {
            get;
            set;
        }
    }
}
0
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 11
02.03.2014, 22:16  [ТС]
Ну вот я сделал по вашему примеру.
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
        int Time = (int)(Server.Time - new DateTime(1970, 1, 1)).TotalSeconds;
 
        DataList.Add(new MyData(Time, 3.14));
 
 
        foreach (var item in DataList)
        {
                if (Time - 120 > item.key)
                {
                    DataList.Remove(item.key);
                }
        }
 
 
        class MyData
        {
            public MyData(int uts, double price)
            {
                key = uts;
                val = price;
            }
            public int key { get; set; }
            public double val { get; set; }
        }
Но как мне удалять элементы из этого списка по ключу? DataList.Remove(item.key); Не работает, говорит DataList.Remove имеет несколько недопустимых аргументов.

Добавлено через 19 минут
С удалением справился так:
C#
1
2
3
4
5
6
7
            for (int i = 0; i < DataList.Count; i++)
            {
                if (Time - 120 > DataList[i].key)
                {
                    DataList.RemoveAt(i);
                }
            }
Но не понимаю как сделать проверку без лишнего цикла на существование элемента с заданным ключом.
Нужно что-то типа такого:
C#
1
2
3
4
if (DataList.IndexOf(Time) == -1)
{
        DataList.Add(new MyData(Time, 3.14));
}
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
03.03.2014, 00:05
То есть, Вам надо решить, есть ли элементы с таким ключом и если нет, то добавить. Так?
Ну в таком случае используйте обычный словарь, и ничего придумывать не надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2014, 00:05

Удаление элементов из массива
Дан целочисленный массив размера N (&gt;2). Удалить из массива все элементы с четными номерами (2,4,...). Условный оператор не использовать.

Удаление элементов из массива
Как удалить отрицательные элементы между двумя положительными?

Удаление групп элементов из массива
Из массива А удалить те цепочки четных элементов, в которых есть хотя бы один элемент из массива В Помогите, пожалуйста..

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

Удаление нулевых элементов из массива
У меня есть код, пользователь вводит двоичные числа в переменные x и y, программа помещает их в массив, для дальнейшей работы c этими...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru