brew install mysql
pip3 install mysql
все еще дает ошибку «configparser», и я не знаю, почему это еще не исправлено.
Вот как бы я это сделал:
using System;
using System.Collections;
using System.Collections.Generic;
class ArrayView<T> : IEnumerable<T>
{
private readonly T[] array;
private readonly int offset, count;
public ArrayView(T[] array, int offset, int count)
{
this.array = array;
this.offset = offset;
this.count = count;
}
public int Length
{
get { return count; }
}
public T this[int index]
{
get
{
if (index < 0 || index >= this.count)
throw new IndexOutOfRangeException();
else
return this.array[offset + index];
}
set
{
if (index < 0 || index >= this.count)
throw new IndexOutOfRangeException();
else
this.array[offset + index] = value;
}
}
public IEnumerator<T> GetEnumerator()
{
for (int i = offset; i < offset + count; i++)
yield return array[i];
}
IEnumerator IEnumerable.GetEnumerator()
{
IEnumerator<T> enumerator = this.GetEnumerator();
while (enumerator.MoveNext())
{
yield return enumerator.Current;
}
}
}
class Program
{
static void Main(string[] args)
{
byte[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
ArrayView<byte> p1 = new ArrayView<byte>(arr, 0, 5);
ArrayView<byte> p2 = new ArrayView<byte>(arr, 5, 5);
Console.WriteLine("First array:");
foreach (byte b in p1)
{
Console.Write(b);
}
Console.Write("\n");
Console.WriteLine("Second array:");
foreach (byte b in p2)
{
Console.Write(b);
}
Console.ReadKey();
}
}
В C # с Linq вы можете сделать это:
smallPortion = largeBytes.Take(4).ToArray();
largeBytes = largeBytes.Skip(4).Take(5).ToArray();
;)
Я не уверен, что вы подразумеваете под:
Я хотел бы разбить массив байтов в определенной точке (индекс) без необходимости просто создавать новый массив байтов и копировать каждый байт одновременно увеличивая отпечаток в памяти операции.
В большинстве языков, конечно же, C #, после выделения массива невозможно изменить его размер. Похоже, вы ищете способ изменить длину массива, что вы не можете. Вы также хотите каким-то образом перезапустить память для второй части массива, чтобы создать второй массив, чего вы также не можете сделать.
В итоге: просто создайте новый массив.
Вы не можете. То, что вы могли бы хотеть, это сохранить отправную точку и количество предметов; по сути, строить итераторы. Если это C ++, вы можете просто использовать std::vector<int>
и использовать встроенные.
В C # я бы создал небольшой класс итераторов, который содержит начальный индекс, счетчик и реализует IEnumerable<>
.
FYI. Структура System.ArraySegment
в основном аналогична структуре ArrayView
в приведенном выше коде. Вы можете использовать эту нестандартную структуру таким же образом, если хотите.