 |
Неизвестное число массивов методу. - Вопросы и ответы, обсуждения - Ваши вопросы по C# только в данном разделе |
22.03.2015, 21:47
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 06.09.2014
 Сообщений: 2
 Популярность: 10
 Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
|
Неизвестное число массивов методу.
Доброго времени суток уважаемые коллеги.
Подскажите пожалуйста как можно в функцию передать неизвестное число массивов. В моём случае массивы байт для их последующей склейки в 1 массив.
вот пример что мне нужно.
передаю в неё 3 массива для примера.
arr1{1,2,3}, arr2[4,5,6], arr4[7,8,9] возвращает arr[1,2,3,4,5,6,7,8,9]
Так не работает к сожалению, в гугле был ничего не нашел.
Код:
public byte[] ArrayCombination(params byte[] arrs)
сейчас делаю так но в коде прямо в разделе логики, что не красиво
Код:
arr1.CopyTo(arr, 0);
arr2.CopyTo(arr, arr1.Length);
arr3.CopyTo(arr, arr1.Length + arr2.Length);
PS: несколько перегруженных методов тоже не особо хочется создавать, душа требует красоты и минимизации кода.
Решение.
Код:
// Объединяет одномерные массивы байт в 1 массив: arr1{1,2,3}, arr2[4,5,6], arr4[7,8,9] возвращает arr[1,2,3,4,5,6,7,8,9]
public byte[] ArrayCombination(params byte[][] arrs)
{
int ell = 0;
int cx = 0;
for (int i = 0; i < arrs.Length; i++) ell += arrs[i].Length;
byte[] buffer = new byte[ell];
for (int i = 0; i < arrs.Length; i++)
for (int s = 0; s < arrs[i].Length; s++)
{
buffer[cx] = arrs[i][s];
cx++;
}
return buffer;
}
}
Последний раз редактировалось JKHKJgj; 22.04.2015 в 18:35.
Причина: добавлено решение.
|
|
|
22.03.2015, 21:54
|
#2
|
|
|
|
Сержант
|
 Регистрация: 18.07.2013
 Сообщений: 148
 Популярность: 84352
 Сказал(а) спасибо: 566
Поблагодарили 258 раз(а) в 195 сообщениях
|
Re: Неизвестное число массивов методу.
public List<byte> ArrayCombination(List<List<byte>> arrs) ?
|
|
|
Пользователь сказал cпасибо:
|
|
22.03.2015, 22:20
|
#3
|
|
|
|
Старший сержант
|
 Регистрация: 29.07.2011
 Сообщений: 197
 Популярность: 8989
 Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: Неизвестное число массивов методу.
Красиво - именно через params, может вы что то делаете не так?
|
|
|
Пользователь сказал cпасибо:
|
|
22.03.2015, 22:39
|
#4
|
|
|
|
Сержант
|
 Регистрация: 18.07.2013
 Сообщений: 148
 Популярность: 84352
 Сказал(а) спасибо: 566
Поблагодарили 258 раз(а) в 195 сообщениях
|
Re: Неизвестное число массивов методу.
|
|
|
22.03.2015, 22:54
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 06.09.2014
 Сообщений: 2
 Популярность: 10
 Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
|
Re: Неизвестное число массивов методу.
Последний раз редактировалось JKHKJgj; 22.03.2015 в 23:03.
Причина: Добавлено сообщение
|
|
|
22.03.2015, 23:16
|
#6
|
|
|
|
Старший сержант
|
 Регистрация: 29.07.2011
 Сообщений: 197
 Популярность: 8989
 Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: Неизвестное число массивов методу.
|
|
|
Пользователь сказал cпасибо:
|
|
22.03.2015, 23:59
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 06.09.2014
 Сообщений: 2
 Популярность: 10
 Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
|
Re: Неизвестное число массивов методу.
Да спасибо огромное вот так всё работает, про это вот [][] я бы сам вероятно не дошел, при чём тут двумерный массив вроде, а нет работает ))
Код:
public byte[] ArrayCombination(params byte[][] arrs)
|
|
|
23.03.2015, 00:18
|
#8
|
|
|
|
Старший сержант
|
 Регистрация: 29.07.2011
 Сообщений: 197
 Популярность: 8989
 Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: Неизвестное число массивов методу.
|
|
|
Пользователь сказал cпасибо:
|
|
23.03.2015, 00:38
|
#9
|
|
|
|
Рыцарь-защитник
|
 Регистрация: 28.08.2009
 Сообщений: 603
 Популярность: 19129
 Золото Zhyk.Ru: 500
 Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
|
Re: Неизвестное число массивов методу.
Я бы написал свой класс.
Код:
public class OwnArray
{
private byte[] _Array = new byte[0];
public int Length { get { return _Array.Length; } }
public OwnArray()
{ }
public OwnArray(params byte[][] inputarray)
{
_Array = new byte[0];
for (int i = 0; i < inputarray.Length; i++)
{
AddArray(inputarray[i]);
}
}
public OwnArray(params byte[] input)
{
AddAsArray(input);
}
public void AddArray(byte[] input)
{
int old = _Array.Length;
Array.Resize(ref _Array, old + input.Length);
Array.Copy(input, 0, _Array, old, input.Length);
}
public void AddAsArray(params byte[] input)
{
byte[] temp = new byte[input.Length];
for (int i = 0; i < input.Length; i++)
{
temp[i] = input[i];
}
AddArray(temp);
}
public byte this[int i]
{
get
{
return _Array[i];
}
set
{
_Array[i] = value;
}
}
}
Удобно очень
Код:
OwnArray MyArray = new OwnArray(0xFF, 0xFF, 0xFF, 0x10);
MyArray.AddAsArray(0x00, 0x00, 0x00, 0x00, 0x00);
MyArray.AddAsArray(0xFF, 0xFF, 0xFF);
for (int i = 0; i < MyArray.Length; i++)
{
Console.WriteLine(MyArray[i]);
}
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
|
|
|
Пользователь сказал cпасибо:
|
|
23.03.2015, 00:50
|
#10
|
|
|
|
Разведчик
|
 Регистрация: 06.09.2014
 Сообщений: 2
 Популярность: 10
 Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
|
Re: Неизвестное число массивов методу.
Ага я класс отдельный и написал ) Один класс по работе с памятью, читает пишет ищет, и этот с массивом. Мне это нужно было чтобы куски байт кода объединять, адреса смещений и.т.д высчитываются автоматически а код мы заранее вручную пишем и вот потом просто это закинул в функцию и пиши ответ в память. А за код благодарю.
Последний раз редактировалось JKHKJgj; 23.03.2015 в 01:20.
Причина: Добавлено сообщение
|
|
|
23.03.2015, 13:47
|
#11
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Неизвестное число массивов методу.
если правильно помню такой массив [][] называется рванным или же массивом массивов ))
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 15:14.
|
 |