Array Splitting ohne Linq

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Rikudo.

    Array Splitting ohne Linq

    Moin,

    Ich versuche gerade folgende Funktion so umzuschreiben das sie ohne Linq (also mit .net 2.0) funktioniert:

    C#-Quellcode

    1. public static List<byte[]> SplitArray(byte[] array, int size)
    2. {
    3. List<byte[]> chunksList = new List<byte[]>();
    4. int skipCounter = 0;
    5. while (skipCounter < array.Length)
    6. {
    7. byte[] chunk = array.Skip(skipCounter).Take(size).ToArray<byte>();
    8. chunksList.Add(chunk);
    9. skipCounter += chunk.Length;
    10. }
    11. return chunksList;
    12. }


    Das ganze splittet mir ein byte[] in weitere byte[]'s einer bestimmten größe.

    Wie schreibe ich das hier:

    C#-Quellcode

    1. ​byte[] chunk = array.Skip(skipCounter).Take(size).ToArray<byte>();


    ohne Linq? :|
    C# Developer
    Learning C++

    Rikudo schrieb:

    Wie schreibe ich das hier:

    C#-Quellcode

    1. byte[] chunk = array.Skip(skipCounter).Take(size).ToArray<byte>();


    ohne Linq? :|
    Ganz genau kriegste das natürlich nicht hin, aber ein hinreichender Ersatz für die Verwendung von .Skip() + .Take() wäre meine Take-Funktion, die beides vereinigt:

    C#-Quellcode

    1. public static T[] Take<T>(T[] items, int start, int count) {
    2. count = Math.Min(items.Length - start, count);
    3. T[] itms = new T[count];
    4. Array.Copy(items, start, itms, 0, count);
    5. return itms;
    6. }

    ErfinderDesRades schrieb:

    Rikudo schrieb:

    Wie schreibe ich das hier:

    C#-Quellcode

    1. byte[] chunk = array.Skip(skipCounter).Take(size).ToArray<byte>();


    ohne Linq? :|
    Ganz genau kriegste das natürlich nicht hin, aber ein hinreichender Ersatz für die Verwendung von .Skip() + .Take() wäre meine Take-Funktion, die beides vereinigt:

    C#-Quellcode

    1. public static T[] Take<T>(T[] items, int start, int count) {
    2. count = Math.Min(items.Length - start, count);
    3. T[] itms = new T[count];
    4. Array.Copy(items, start, itms, 0, count);
    5. return itms;
    6. }



    Super, Danke, hat mir sehr geholfen :)

    C#-Quellcode

    1. public static List<byte[]> SplitArray(byte[] Arr, int Size)
    2. {
    3. List<byte[]> ArrChunks = new List<byte[]>();
    4. int Skips = 0;
    5. while (Skips < Arr.Length)
    6. {
    7. int count = Math.Min(Arr.Length - Skips, Size );
    8. byte[] itms = new byte[count];
    9. Array.Copy(Arr, Skips, itms, 0, count);
    10. byte[] ArrParts = itms;
    11. ArrChunks.Add(ArrParts);
    12. Skips += ArrParts.Length;
    13. }
    14. return ArrChunks;
    15. }
    C# Developer
    Learning C++