Перейти к содержимому

Как заполнить массив элементами другого массива

  • автор:

Курсы javascript

Здравствуйте, нужно создать массив, состояший из элементов другого массива, при этом
1)элементы не должны повторяться,
2)их количество должно быть равно количетству элементов в исх. массиве,
3)они д.б. расположены в случайном порядке
Отмечу, что мне нужны не сами элементы исходного массива в конечном массиве, а их порядковые номера, и чтобы именно они были случайны и не повторялись.
Как я делаю:

this.list = [];//Исходный массив, там у меня хранятся значения x1,x2,x3,x4
this.temp=[];//Конечный массив

for (var i = 1; i var rand = Math.floor(Math.random()*this.list.length);
var rrand = this.list.indexOf(this.list[rand]);
this.temp.push(rrand);
this.temp.sort();
>
//Проверка на повторения в конечном массиве
for (var i = this.temp.length; i > 0; i—)
if (this.temp[i] === this.temp[i-1])
this.temp.splice(i, 1);
>
>
В общем говоря, в конечном массиве у меня нет такого же количества элементов, что и в исходном.
Пожалуйста помогите решить эту проблему.

Заполнение массива элементами другого массива

В Dictionaty ключ это число месяца. Каждому числу в месяце хочу присвоить Element . Все возможные варианты присвоения хранятся в Elements . Свойства No и Yes это числа месяца когда обязательно нужно присвоить и когда присваивать нельзя. Задача в том что бы заполнить Month элементами максимально рпвномерно, чтобы между одинаковыми элементами было минимум два других. Количество элементов в Elements около десяти. Количество элементов в Yes и No от нуля до трёх. Всё что получилось у меня жуткая каша из наслоения циклов и проверок, но увы нерабочая от слова совсем. Помогите решить проблему или подскажите верные инструменты для ее решения. Пример входных данных:

Elements.Add(new Element(new[] < 1, 2 >, null)); Elements.Add(new Element(new[] < 17 >, new[] < 10 >)); Elements.Add(new Element(null, null)); Elements.Add(new Element(null, new[] < 11 >)); 

Отслеживать
28.6k 21 21 золотой знак 59 59 серебряных знаков 141 141 бронзовый знак
задан 3 янв 2020 в 14:24
1 2 2 бронзовых знака

Для начала чётко сформулируйте вопрос. Вы хотите присвоить Element: сначала каждому месяцу, потом пишете «максимально равномерно», при этом не объясняя правило, какие элементы считаются одинаковыми. Входные данные для заполнения вы храните в списке elements и его же хотите присвоить в дни. Вопрос непонятен. Алгоритм непонятен. Опишите задачу более подробно.

3 янв 2020 в 15:02

Итого у вас есть входные данные: int[] no — набор дней, которые заполнять нельзя и int[] yes — набор дней, которые должны быть строго заполнены. Давайте такие данные будут, а не public Element(int[] no, int[] yes) , хорошо? Вам нужно сформировать результат в виде new Dictionary() — что же туда нужно присвоить а? годится присваивать new Element() ?

3 янв 2020 в 15:16

@A K♦ а количество дней узнаю вот так DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month);

3 янв 2020 в 15:16

@A K♦ в Dictionary ключ день месяца от 1 до 31 значение экземпляр класса Element эти экземпляры я беру из колекции Elements

3 янв 2020 в 15:19

Меня просто убивает вот какой момент: есть какие дни месяца, которые ничем не надо заполнять — ну допустим. Есть дни, которые строго нужно заполнить. Если день может быть строго ЛИБО заполнен, ЛИБО не заполнен — то откуда взялось условие по равномерности заполнения? Что с чем сравнивается? Какие расстояния, какие количества элементов между двумя?? Если же в месяце тридцать дней, а в елемент с десяток дней — будут какие-то пропуски. Что заполняем, как? Какой смысл в заполнении дней месяца теми же самыми данными, что и входной набор данных?

Заполнение массива элементами из другого массива.

Контрольные вопросы к лабораторной работе «Одномерный массив»

  1. Оператор цикла типа «Для». Форма записи, назначение. Пример использования
  2. Как организовать тело цикла, состоящее из нескольких операторов.
  3. Что такое массив. Как объявить целочисленный массив и массив действительных чисел.
  4. Способы заполнения исходного массива. Для чего осуществляется инициализация массива.
  5. Нумерация элементов массива. Что такое индекс элемента. Тип. Диапазон изменения. Может ли индекс быть отрицательным числом? Чётным?
  6. Что происходит, когда индекс элемента выходит за размер массива? Например, объявлен массив intA[25]; А в программе встречается строка printf(“%d”,A[100]);
  7. Функция random(N); Назначение, Описание работы.
  8. Функция randomize( ); Назначение, Описание работы.

Контрольные к лабораторной работе «Программа-диалог»

  1. Назначение директивы #include
  2. Понятие формата. Виды форматов.
  3. Управляющие последовательности в Си.
  4. Функция форматированного вывода в Си. Форма записи, назначение и использование.
  5. Функция форматированного ввода в Си. Форма записи, назначение и использование. Особенности её работы.
  6. Функция неформатированного ввода в Си. Форма записи, назначение и использование.
  7. Функция очистки буфера ввода и ее назначение.
  8. Назначение функций atoi,atof,atol.

Контрольные вопросы к лабораторной работе «Программа-тест»

  1. Назначение директивы #define.
  2. Оператор условия в Си. Формы записи.
  3. Арифметические и логические операции в Си.
  4. Дополнительные операции присваивания в Си.
  5. Особенности использования функций getch(),gets() и scanf() в Си.
  6. Запишите два способа ввода численной переменной с клавиатуры (используя форматированный и неформатированный ввод).
  7. Организация группы операторов в Си.

JavaScript | Как добавить массив внутрь другого массива?

Мы хотим добавить новый массив [55, 55] внутрь оригинального массива, чтобы сохранились все элементы. Как это сделать?

В какое место добавить( вставить ) новый массив?

Существует всего 3 варианта куда мы можем запихнуть новый массив:

Рассмотрим все 3 варианта реализации. Нам нужно воспользоваться методом splice() для объектов-прототипов Array .

Как добавить массив в начало другого массива методом splice() ?

Первым параметром мы указываем стартовый индекс, с которого начнётся добавление нового массива. В нашем случае добавлять будем в начало т. е. добавляемый массив станет первым элементом оригинального массива — это индекс 0 . Остальные элементы сдвинутся вправо. Длина оригинального массива увеличится.

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

Третьим параметром мы передаём сам новый массив, который станет первым элементом оригинального массива — это [55, 55] .

var massiv = [1, 2, 3, 4] massiv.splice(0, 0, [55, 55])

Теперь наш массив имеет вид:

[[55, 55], 1, 2, 3, 4]

Добавили массив в начало другого массива - JavaScript

Мы успешно добавили массив в начало другого массива и сохранили все «сдвинутые» элементы.

Как добавить массив в середину другого массива методом splice() ?

Понятие «середина» означает то, что мы пытаемся вставить элемент не последним и не первым. Вставленный массив будет где-то между — по середине.

Например, вставляемый массив [55, 55] мы сделаем третьим элементом оригинального массива.

var massiv = [1, 2, 3, 4] massiv.splice(2, 0, [55, 55])

Теперь наш массив имеет вид:

[1, 2, [55, 55], 3, 4]

Добавили массив в середину другого массива - JavaScript

Как добавить массив в конец другого массива методом splice() ?

Метод splice() работает таким образом, что если мы укажем в качестве стартового индекса « -1 «, то применится правило, которое закинет наш массив не в конец, а в пред-конец. То есть наш вставляемый массив станет предпоследним элементом. И это не совсем то, что нам нужно.

По этой причине нам нужно вызывать два метода splice() :

  • Один из splice() будет третим параметром другого splice()
  • Другой из splice() будет методом вызова на оригинальном массиве

Конструкция кода будет выглядеть так:

massiv.splice(-1, 0, . massiv.splice(-1, 1, [55, 55]))

Теперь наш массив имеет вид:

[1, 2, 3, 4, [55, 55]]

Добавили массив в конец другого массива - JavaScript

Как это работает?

Первая трансформация оригинального массива:

. massiv.splice(-1, 1, [55, 55]))

Эта конструкция изменяет оригинальный массив на [1, 2, 3, [55, 55] ] и возвращает нам удалённые элементы — другой массив [4].

Вторая трансформация оригинального масива:

massiv.splice(-1, 0, . [4]))

Теперь, если мы вызовем метод splice() на массиве [1, 2, 3, [55, 55] ] со стартовой позицией также «-1», и не удалим элементы (создадим сдвиг), и распакуем элементы массива [4] при помощи троеточия (spread), то получим нужный результат

[1, 2, 3, 4, [55, 55]]

Информационные ссылки

Стандарт ECMAScript — Раздел «23.1.3.28 Array.prototype.splice ( start , deleteCount , … items )» — https://tc39.es/ecma262/#sec-array.prototype.splice

Вам также может понравиться

Знак доллара при перестановках захватов в replace - JavaScript

Опубликовано 19.03.2023

JavaScript | Что означает знак доллара?

Знак доллара «$» в JavaScript может использоваться в разных ситуациях. Самое простое — им можно называть имена переменных. Глобальный объект и […]

JavaScript | Русский алфавит | Строчные буквы

Опубликовано 14.04.2021

JavaScript | Русский алфавит | Строчные буквы

Строчные буквы русского алфавита (33 буквы) [«а»,»б»,»в»,»г»,»д»,»е»,»ё»,»ж»,»з»,»и»,»й»,»к»,»л»,»м»,»н»,»о»,»п»,»р»,»с»,»т»,»у»,»ф»,»х»,»ц»,»ч»,»ш»,»щ»,»ъ»,»ы»,»ь»,»э»,»ю»,»я»] Символьные коды строчных букв русского алфавита [1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, […]

Fetch | Как сохранить изображение на клиенте? | JavaScript

Опубликовано 10.05.2022

Fetch | Как сохранить изображение на клиенте? | JavaScript

У нас есть задача. Мы хотим при помощи браузера, языка JavaScript и прикладных интерфейсов программирования (APIs) скачать изображение на HTML-странице какого-нибудь сайта. […]

Ночные Работники Службы | Кеши

Опубликовано 15.11.2021

Ночные Работники Службы | Кеши

Чтобы позволить авторам полностью управлять своими кэшами содержимого для автономного использования, Window и WorkerGlobalScope предоставляют методы асинхронного кэширования, которые открывают и […]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *