powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обрезать массив?
4 сообщений из 54, страница 3 из 3
Как обрезать массив?
    #39283159
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можнопопробовать

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 internal class Program
    {
        private static void Main()
        {
            unsafe
            {
                var buffer = (int*)Memory.Alloc(100 * sizeof(int));
                Console.WriteLine("*{0}", (int)buffer);
                for (var i = 0; i < 100; i++)
                    Console.WriteLine(buffer[i]);

                var buffer2 = (int*)Memory.ReAlloc(buffer, 10 * sizeof(int));
                Console.WriteLine("*{0}", (int)buffer2);
                for (var i = 0; i < 10; i++)
                    buffer2[i] = 10;
                for (var i = 0; i < 100; i++)
                    Console.WriteLine(buffer2[i]);
                
                Memory.ReAlloc(buffer2, 0);
                
            }
            Console.Read();
        }
    }

    public unsafe class Memory
    {
        static readonly int Ph = GetProcessHeap();

        public static void* Alloc(int size)
        {
            var result = HeapAlloc(Ph, HEAP_ZERO_MEMORY, size);
            if (result == null) throw new OutOfMemoryException();
            return result;
        }
        public static void Free(void* block)
        {
            if (!HeapFree(Ph, 0, block)) throw new InvalidOperationException();
        }

        public static void* ReAlloc(void* block, int size)
        {
            var result = HeapReAlloc(Ph, HEAP_ZERO_MEMORY, block, size);
            if (result == null) throw new OutOfMemoryException();
            return result;
        }

        const int HEAP_ZERO_MEMORY = 0x00000008;

        [DllImport("kernel32")]
        static extern bool HeapFree(int hHeap, int flags, void* block);
        [DllImport("kernel32")]
        private static extern int GetProcessHeap();
        [DllImport("kernel32")]
        private static extern void* HeapAlloc(int hHeap, int flags, int size);

        [DllImport("kernel32")]
        private static extern void* HeapReAlloc(int hHeap, int flags, void* block, int size);
          

    }



а вообще, так красивее

Код: 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.
25.
26.
27.
28.
 internal class Program
    {
        private static void Main()
        {
            int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            var res = array.Part(0,7);
            Console.WriteLine(res.ElementAt(2));
            foreach (var re in res)
            {
                Console.Write("{0},", re);
            }
            while (true)
            {
                
            }
        }
    }

    internal static class Helper
    {
        public static IEnumerable<T> Part<T>(this T[] array, int start, int finish)
        {
            for (var i = start; i <= finish; i++)
                yield return array[i];
        }
    }
    //3
    //1,2,3,4,5,6,7,8,


...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283166
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзопропилФрагментация с# тож касается
Сборщик мусора .net может дефрагментировать память, это дорого но реализуемо, в отличии от С/С++.
Может, но в текущей реализации большие фрагменты - не трогает
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283865
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиможнопопробовать

а вообще, так красивее

Код: 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.
25.
26.
27.
28.
 internal class Program
    {
        private static void Main()
        {
            int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            var res = array.Part(0,7);
            Console.WriteLine(res.ElementAt(2));
            foreach (var re in res)
            {
                Console.Write("{0},", re);
            }
            while (true)
            {
                
            }
        }
    }

    internal static class Helper
    {
        public static IEnumerable<T> Part<T>(this T[] array, int start, int finish)
        {
            for (var i = start; i <= finish; i++)
                yield return array[i];
        }
    }
    //3
    //1,2,3,4,5,6,7,8,



вообще-то Take & Skip где-то так и реализованы...
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283900
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!,
так этот ж я предложил, в живую, рука бога..
...
Рейтинг: 0 / 0
4 сообщений из 54, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обрезать массив?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]