Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
21 / 21 / 13
Регистрация: 08.12.2015
Сообщений: 71

Склейка массивов

28.03.2017, 13:26. Показов 8500. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане, помогите с заданием с образовательной платформы uLearn.

Склейка массивов

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

Для того, чтобы создать новый массив, используйте статический метод Array.CreateInstance, принимающий тип элемента массива.

Для того, чтобы узнать тип элементов в переданном массиве, используйте myArray.GetType().GetElementType().

Проверьте, что типы элементов совпадают во всех переданных массивах!

Если результирующий массив создать нельзя, возвращайте null.

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
            public static void Main()
            {
                var ints = new[] { 1, 2 };
                var strings = new[] { "A", "B" };
 
                Print(Combine(ints, ints));
                Print(Combine(ints, ints, ints));
                Print(Combine(ints));
                Print(Combine());
                Print(Combine(strings, strings));
                Print(Combine(ints, strings));
            }
 
            static void Print(Array array)
            {
                if (array == null)
                {
                    Console.WriteLine("null");
                    return;
                }
                for (int i = 0; i < array.Length; i++)
                    Console.Write("{0} ", array.GetValue(i));
                Console.WriteLine();
            }
Подсказки:

- Для создания метода с переменным количеством аргументом, используйте ключевое слово params

- static Array Combine(params Array[] arrays) { ...

- var elementType=arrays[0].GetType().GetElementType();

- var result=Array.CreateInstance(elementType, summaryLength);

Вот что у меня получилось:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            static Array Combine(params Array[] arrays)
            {
                int summaryLength=0;
                Type checkType = arrays[0].GetType().GetElementType();
 
                foreach (var array in arrays)
                {
                    if (array.GetType().GetElementType() != checkType) return null; // Проверка, что типы элементов совпадают во всех переданных массивах
                    summaryLength+=array.Length;
                }
 
                var result = Array.CreateInstance(arrays[0].GetType().GetElementType(), summaryLength);
 
                for (var i = 0; i < arrays.Length; i++)
                {
                    Array.Copy(result, 0, arrays[i], arrays[i].Length, result.Length);
                }
 
                return result;
            }
При запуске получаю System.ArgumentException "Длина результирующего массива недостаточна. Проверьте значения destIndex и length, а также нижние границы массива." на строке копирования массива.

Добавлено через 8 минут
Поправка, строка копирования должна иметь следующий вид:
C#
1
Array.Copy(arrays[i], result, arrays[i].Length);
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2017, 13:26
Ответы с готовыми решениями:

Склейка массивов: реализуйте метод Combine, который возвращает массив, собранный из переданных массивов
Склейка массивов Реализуйте метод Combine, который возвращает массив, собранный из переданных массивов. Для того, чтобы создать...

Нарезка и склейка файлов
Всем доброго времени суток. В шарпе только начал разбираться и учится). По нарезке и склейке нашел следующее. Код вроде работает, но увы...

Вертикальная склейка изображений
Здравствуйте. Мне нужна небольшая помощь. Дело в том, что у меня во время склейки фотографий (из так называемых обрезок) теряется часть...

4
21 / 21 / 13
Регистрация: 08.12.2015
Сообщений: 71
28.03.2017, 13:31  [ТС]
В итоге неправильный вывод:
Изображения
 
0
21 / 21 / 13
Регистрация: 08.12.2015
Сообщений: 71
28.03.2017, 13:37  [ТС]
Не такой вид конечно должна иметь эта строка, а какой должна? в этом вопрос)
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
28.03.2017, 13:50
Лучший ответ Сообщение было отмечено RobinHood как решение

Решение

Цитата Сообщение от RobinHood Посмотреть сообщение
а какой должна?
C#
1
Array.Copy(arrays[i], 0, result, /*индекс в который начать копирование*/, arrays[i].Length);
1
21 / 21 / 13
Регистрация: 08.12.2015
Сообщений: 71
28.03.2017, 14:07  [ТС]
TopLayer, спасибо большое! Сделал так:
C#
1
2
3
4
5
6
int index=0;
for (var i = 0; i < arrays.Length; i++)
{
   Array.Copy(arrays[i], 0, result, index, arrays[i].Length);
   index += arrays[i].Length;
}
Добавлено через 5 минут
На сайте были варианты попроще :
C#
1
2
3
4
5
var result = Array.CreateInstance(type, length);
var index = 0;
foreach (var array in arrays)
    foreach (var elem in array)
        result.SetValue(elem, index++);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2017, 14:07
Помогаю со студенческими работами здесь

Пользователь вводит длину массивов. Заполнение массивов случайными числами
Помогите доработать задачу В путем отсеивание из задачи А задачу Б (Язык С#) Пользователь вводит длину массивов. Заполнение массивов...

POST запрос: "Назначение типов массивов разрешено только через выражения инициализации массивов"
Здравствуйте! Делаю пост запрос и возникла ошибка:WebRequest request = WebRequest.Create(&quot;Скрипт авторизации&quot;); ...

Как делается "быстрая" склейка массивов строк?
Добрый, ситуация: есть база, в ней таблица, в ней много строк (около полу миллиона). 2 столбца в этой таблице - уникальный ключ (именно...

Склейка
В общем 3 языковые версии сайта. Англ, рус, корей. Гугл склеил все к английской, то бишь в выдаче находит только англ версию. В яндексе...

Склейка
Я впервые столкнулся с проблемой склейки двух разных доменов. Причина : основной домен слишком длинный и его нереально запомнить, для...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru