Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
Excel

Как добавить элементы одного одномерного массива в другой (того же типа) БЕЗ цикла и быстрее, чем с циклом

30.05.2024, 13:10. Показов 1665. Ответов 16

Студворк — интернет-сервис помощи студентам
Приветствую!

Суть: у меня есть основной массив, который наполняется блоками(другими массивами). Иногда НЕТ возможности наполнять основной массив напрямую, минуя промежуточный.
В итоге, задача сводится к тому, как побыстрее наполнить основной массив добавочным.
В принципе, для строковых массивов и так всё довольно неплохо, но хотелось бы обсудить альтернативные варианты — в том числе и для других типов массивов (кроме строкового).

Предполагаю, что тут может помочь копирование памяти, но не знаю, как это сделать.
Процедуры и тестовый стенд
Visual Basic
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Option Base 1
Option Explicit
Option Private Module
'==================================================================================================
Sub PRDX_Arr1D_AddData_Str(aMain() As String, aAdd() As String)
Dim nA&, nM&, LBa&, UBa&, n&
 
    LBa = LBound(aAdd)
    UBa = UBound(aAdd)
    nA = UBa - LBa + 1
    nM = UBound(aMain)
    ReDim Preserve aMain(LBound(aMain) To nM + nA)
 
    For n = LBa To UBa
        nM = nM + 1: aMain(nM) = aAdd(n)
    Next n
End Sub
'==================================================================================================
Sub PRDX_Arr1D_Merge_Str(aOut() As String, ParamArray aArrStr())
Dim x, y, t!, n&, nEl&
 
    For Each x In aArrStr   ' 35% of TotalTime
        nEl = nEl + (UBound(x) - LBound(x) + 1)
    Next x
 
    ReDim aOut(nEl)
    
    For Each x In aArrStr   ' 65% of TotalTime
        For Each y In x
            n = n + 1: aOut(n) = y
        Next y
    Next x
 
End Sub
'==================================================================================================
Sub PRDX_Arr1D_Merge_Str_ByAdd(aOut() As String, ParamArray aArrStr())
Dim a$(), n&
 
    n = LBound(aArrStr)
    aOut = aArrStr(n)
    
    For n = n + 1 To UBound(aArrStr)
        a = aArrStr(n)
        PRDX_Arr1D_AddData_Str aOut, a
    Next n
End Sub
'--------------------------------------------------------------------------------------------------
Private Sub Test_Arr1D_AddOrMerge()
Dim a$(), a1$(), a2$(), t!, n&
Const nEl& = 1000000 ' 1 mln
 
    t = Timer
        ReDim a1(nEl)
        
        For n = 1 To nEl
            a1(n) = "TestStringWithLong_" & n
        Next n
    Debug.Print Round(Timer - t, 2), "Fill"     ' 0.2
    
    t = Timer
        a2 = a1
    Debug.Print Round(Timer - t, 2), "Copy"     ' 0.1
 
    t = Timer
        PRDX_Arr1D_Merge_Str a, a1, a2
    Debug.Print Round(Timer - t, 2), "Merge"    ' 0.9
    Erase a
 
    t = Timer
        PRDX_Arr1D_Merge_Str_ByAdd a, a1, a2
    Debug.Print Round(Timer - t, 2), "Merge2"   ' 0.3
 
     t = Timer
        PRDX_Arr1D_AddData_Str a1, a2
    Debug.Print Round(Timer - t, 2), "Add"      ' 0.1
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2024, 13:10
Ответы с готовыми решениями:

как передать данные с одного массива в другой без цикла
Господа я не так давно начал покорять c++ и у меня такое задание передать любые цифры из одного массива в другой не используя цикла, ну и...

Входят ли все элементы одного одномерного массива в другой одномерный массив?
Добрый день уважаемые форумчане, будьте так любезны подскажите пожалуйста в данном вопросе. Имеются два массива: String...

Добавить элементы из одного массива в другой
Всем привет. Подскажите пожалуйста как можно добавить элементы из одного массива в другой например есть массив Array1=(1 3 5) и Array=(1...

16
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
30.05.2024, 16:58
Jack Famous, привет. Со строками много нюансов. Массив строк это фактически массив указателей на строки, которые фактически тоже отдельные массивы в отдельных выделенных участках памяти. Можно конечно скопировать указатели строк из одного массива в другой с помощью CopyMemory, но при этом, эти скопированные указатели становятся, как бы не безопасными и вызовут сбой при завершении процедуры, поскольку VB нет полной поддержки работы с указателями. Поэтому эти лишние указатели, нужно еще обязательно очищать перед выходом из процедуры..
Массивы чисел можно просто копировать
Visual Basic
1
CopyMemory Ar1#(5), Ar2#(0), размер
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
30.05.2024, 17:23  [ТС]
testuser2, привет!
Мда… Нехорошая ситуация со строками получается …
Может, Виталий поможет? Он в своей библе делал инструмент для обязательного сброса чего-то там (может, как раз, указателей).

Цитата Сообщение от testuser2 Посмотреть сообщение
Массивы чисел можно просто копировать
а можно более расширенный пример?)
Чтобы было видно оба массива и результат.
К тому же я не знаю, как размер вычислить правильно…
0
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
30.05.2024, 17:39
Цитата Сообщение от Jack Famous Посмотреть сообщение
а можно более расширенный пример?)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub sdfsfsa()
    Dim i&, ar1#(), ar2#()
    
    ReDim ar1(1 To 10)
    ReDim ar2(1 To 5)
    For i = 1 To 5
        ar2(i) = i
    Next
    
    CopyMemory ar1(6), ar2(1), 5 * Len(ar2(1))
    
End Sub
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
30.05.2024, 18:17  [ТС]
testuser2, непонятны волшебные числа. Поясни, если можешь, пожалуйста …
Тестирую. Завтра отвечу.
0
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
30.05.2024, 18:19  [ТС]
Вот эти числа
0
 Аватар для bedvit
1204 / 255 / 22
Регистрация: 20.05.2016
Сообщений: 1,125
Записей в блоге: 21
30.05.2024, 18:46
На С++ я бы сделал так:
Создаешь новый пустой массив вариантов, размером с первых два. Копируешь указатели на строки из первого и второго в новый массив. В старом обнуляешь указатели и тип варианта. Готово. По сути ты скопировал только указатели, строки так и лежат на своем участке памяти. Первые два массива безопасно очистяться, т.к. мы обнулили варианты. Без обнуления каждый указатель на строку будет очищатся дважды, в новом массиве и в старом. Будет выброс исключения, про что написал testuser2. Но VBA здесь не виноват. Сами велосипед придумываете.

Добавлено через 2 минуты
В теории в VBA тоже так можно сделать, занулив память первых двух массивов.

Добавлено через 7 минут
Числа не генерируют ошибку, потому что хранятся в самом варианте, а не в выделенной отдельной памяти, как строки (с указателем в варианте). Поэтому числа получается два и два раза очищается (старое, новое, здесь все ок)

Добавлено через 4 минуты
Только с числами нет смысла в такой алгоритм городить.
1
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
31.05.2024, 11:06
Лучший ответ Сообщение было отмечено Jack Famous как решение

Решение

Цитата Сообщение от bedvit Посмотреть сообщение
Без обнуления каждый указатель на строку будет очищатся дважды, в новом массиве и в старом. Будет выброс исключения, про что написал testuser2. Но VBA здесь не виноват.
Нет ну может быть, на каком-нибуь ЯП-е с поддержкой указателей, только когда явно создаешь указатель, тогда работает т.н. счетчик ссылок, но как мне кажется, механизм т.н. "сборщика мусора" мог бы работать лучше, если бы, работала какая-то проверка перед освобождением любой ссылки, чтоб не "долбануть" одну и ту же ссылку 2 раза. На VBA, понятно почему нету такого, но на C# уж точно должно быть. Я слышал, там такая фишка (на C# или на Java не помню), что выделенная память не освобождается, пока есть хотябы одна ссылка на нее, это подобно жестким ссылкам в файловой системе - пока есть хоть одна ссылка, файл не стирается.

Добавлено через 56 секунд
Цитата Сообщение от Jack Famous Посмотреть сообщение
Вот эти числа
Ну ты наверное уже понял, что это за числа )

Добавлено через 2 часа 38 минут
Решение вопроса, как я вижу (под спойлером) для строковых массивов.
Кликните здесь для просмотра всего текста
Visual Basic
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
Private Declare PtrSafe Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As LongPtr)
#If Win64 Then
    Private Const ptrSz^ = 8
#Else
    Private Const ptrSz& = 4
#End If
Private Enum MergeType
    mrgCopy
    mrgMove
End Enum
 
Private Sub ExapleMergeStrArr1D()
    Dim arMain$(), arEmp$()
    ReDim arSrc$(2)
    
    arSrc = Split("Строка1 Строка2 Строка3", " ")
    MergeStrArr1D arMain, arSrc          'копирование строк из arSrc в arMain
    
    arSrc = Split("Строка4 Строка5 Строка6 Строка7", " ")
    MergeStrArr1D arMain, arSrc, mrgMove 'перемещение строк из arSrc в arMain    
End Sub
 
Private Sub MergeStrArr1D(arDst$(), arSrc$(), Optional ByVal mrgTp As MergeType)
'(Копирование/перемещение строк из одного строкового массива в другой (объединение массивов)
'Testuser 31.05.24 'https://www.cyberforum.ru/vba/thread3169815.html#post17322611
    Dim UbDst&, LbSrc&, UbSrc&, CntSrc&, SzSrc&, arCpy$()
    
    UbDst = -1
    On Error Resume Next 'если массив arDst не инициализирован, произойдет ошибка, но она не мешает дальнейшему процессу
      UbDst = UBound(arDst)
    On Error GoTo 0
    LbSrc = LBound(arSrc): UbSrc = UBound(arSrc)
    CntSrc = UbSrc - LbSrc + 1
    SzSrc = CntSrc * ptrSz
    ReDim Preserve arDst(UbDst + CntSrc)
    
    If mrgTp = mrgCopy Then
        arCpy = arSrc                     'создаем копию массива-источника
        CopyMemory ByVal VarPtr(arDst(UbDst + 1)), ByVal VarPtr(arCpy(LbSrc)), SzSrc 'копируем указатели
        ZeroMemory ByVal VarPtr(arCpy(LbSrc)), SzSrc 'обнуляем указатели в источнике
    Else
        CopyMemory ByVal VarPtr(arDst(UbDst + 1)), ByVal VarPtr(arSrc(LbSrc)), SzSrc
        ZeroMemory ByVal VarPtr(arSrc(LbSrc)), SzSrc
    End If
End Sub
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
31.05.2024, 15:11  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Решение вопроса, как я вижу (под спойлером) для строковых массивов.
testuser2, перемещение — «ЭТО ПРОСТО АХ**ННО»
Огромное спасибо! Профит просто невероятный. Временем работы, по сути, теперь вообще можно пренебречь (как при смене размерностей у Виталия). Это позволит строить логику гораздо более гибко.
Код
Visual Basic
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
' Based on: Testuser 31.05.24 'https://www.cyberforum.ru/vba/thread3169815.html#post17322611
Sub PRDX_Arr1D_Add_Str_API(aMain$(), aAdd$(), Optional SaveAdd As Boolean)
Dim LBm&, UBm&, LBa&, UBa&, nA&, SzAdd^, aBuf$()
Const ptrSz^ = 8 ' — For Win64 Else 4
 
    LBm = LBound(aMain): UBm = UBound(aMain)
    LBa = LBound(aAdd):  UBa = UBound(aAdd)
    nA = UBa - LBa + 1:  SzAdd = nA * ptrSz
    ReDim Preserve aMain(LBm To UBm + nA)
 
    If SaveAdd Then
        aBuf = aAdd
        API_Memory_Copy ByVal VarPtr(aMain(UBm + 1)), ByVal VarPtr(aBuf(LBa)), SzAdd
        API_Memory_Zero ByVal VarPtr(aBuf(LBa)), SzAdd
    Else
        API_Memory_Copy ByVal VarPtr(aMain(UBm + 1)), ByVal VarPtr(aAdd(LBa)), SzAdd
        API_Memory_Zero ByVal VarPtr(aAdd(LBa)), SzAdd: Erase aAdd
    End If
End Sub
'==================================================================================================
Private Sub Test_PRDX_Arr1D_Add_Str_API()
Dim a$(), a2$(), s$, t!, n&
Const nEl& = 10000000 ' 10 mln
Const nType& = 3
 
    t = Timer
        ReDim a(nEl), a2(nEl)
 
        For n = 1 To nEl
            a(n) = "TestStringWithLong_" & n
            a2(n) = "TestStringWithLong_" & (n + nEl)
        Next n
    Debug.Print Round(Timer - t, 2), "Fill"                         ' 1.81
 
'    t = Timer
'        a2 = a
'    Debug.Print Round(Timer - t, 2), "Dupl"                        ' 0.83
 
    t = Timer
        Select Case nType
            Case 1: PRDX_Arr1D_Add_Str a, a2:            s = "Add"  ' 0.98
            Case 2: PRDX_Arr1D_Add_Str_API a, a2, True:  s = "Copy" ' 0.86
            Case 3: PRDX_Arr1D_Add_Str_API a, a2, False: s = "Move" ' 0.04 (!!!) WOW
        End Select
    Debug.Print Round(Timer - t, 2), s, LBound(a), UBound(a)
    Debug.Print a(LBound(a)), a(UBound(a)) ', "«" & a2(LBound(a2)) & "»", "«" & a2(UBound(a2)) & "»" ' TestStringWithLong_1 | TestStringWithLong_20 000 000 | «» | «»
 
End Sub
Копирование не сильно отличается от перебора, но чуть быстрее (и почти также быстро, как дублирование массива в новую переменную). Но оно, в большинстве случаев, и не нужно.
Если ПЕРЕМЕЩАТЬ (очищать добавочный массив), то он продолжает существовать, только все элементы — пустые. Добавил Erase.

Как изменится подобная функция для чисел и варианта?

UPD: Так можно передавать пустой «основной» массив
Visual Basic
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
Option Base 1
Option Explicit
Option Private Module
'==================================================================================================
' String
'==================================================================================================
' Based on: Testuser 31.05.24 'https://www.cyberforum.ru/vba/thread3169815.html#post17322611
Sub PRDX_Arr1D_Add_Str_API(aMain$(), aAdd$(), Optional SaveAdd As Boolean)
Dim LBm&, UBm&, LBa&, UBa&, nA&, SzAdd^, aBuf$()
Const ptrSz^ = 8 ' — For Win64 Else 4
 
    LBa = LBound(aAdd):  UBa = UBound(aAdd)
    nA = UBa - LBa + 1:  SzAdd = nA * ptrSz
 
    If PRDX_Arr_Check_IsFull(aMain) Then    ' ArrAdd
        UBm = UBound(aMain)
        ReDim Preserve aMain(LBound(aMain) To UBm + nA)
    Else                                    ' ArrReplace
        UBm = LBa - 1                       ' Fake UBound
        ReDim aMain(LBa To UBa)             ' Size by aAdd
    End If
 
    If SaveAdd Then
        aBuf = aAdd
        API_Memory_Copy ByVal VarPtr(aMain(UBm + 1)), ByVal VarPtr(aBuf(LBa)), SzAdd
        API_Memory_Zero ByVal VarPtr(aBuf(LBa)), SzAdd
    Else
        API_Memory_Copy ByVal VarPtr(aMain(UBm + 1)), ByVal VarPtr(aAdd(LBa)), SzAdd
        API_Memory_Zero ByVal VarPtr(aAdd(LBa)), SzAdd: Erase aAdd
    End If
End Sub
В такой редакции (примерно, как у тебя) — можно ЗАМЕНЯТЬ одну переменную другой. Это позволяет избегать некоторых ветвлений в основном коде, что ОЧЕНЬ удобно.
Думаю, с проверкой массива на наличие элементов ( If PRDX_Arr_Check_IsFull() ) проблем не возникнет
1
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
31.05.2024, 16:27
Цитата Сообщение от Jack Famous Посмотреть сообщение
Как изменится подобная функция для чисел и варианта?
Для чисел и дат тоже самое, только обнуление источника не нужно и ветвление Copy/Move, там в любом случае копирование. С вариантом сложнее, в нем же могут содержаться как простые типы, так и ссылочные и надо учитывать структуру варианта.
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
03.06.2024, 13:45  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
С вариантом сложнее, в нем же могут содержаться как простые типы, так и ссылочные и надо учитывать структуру варианта.
пока забиваем на него
Цитата Сообщение от testuser2 Посмотреть сообщение
Для чисел и дат тоже самое, только обнуление источника не нужно и ветвление Copy/Move, там в любом случае копирование
а вот тут интересно. Не понял, почему не нужно обнуление …

И константа ptrSz та же будет? Боюсь вывалиться в синий кран на тестах, так что проясни, пожалуйста
0
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
03.06.2024, 14:06
Цитата Сообщение от Jack Famous Посмотреть сообщение
а вот тут интересно. Не понял, почему не нужно обнуление …
Потому что там в элементах массива содержатся не указатели а сами значения (данные), допустим массив типа Double, у него будут элементы по 8байт и в них будут записаны 8байтные значения типа Double
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
03.06.2024, 14:17  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Потому что там в элементах массива содержатся не указатели а сами значения (данные)
тупанул))) вы это с Виталием описали, когда ещё со строками разбирались

Цитата Сообщение от testuser2 Посмотреть сообщение
допустим массив типа Double, у него будут элементы по 8байт и в них будут записаны 8байтные значения типа Double
я правильно понимаю, что, ptrSz для массивов разного типа будет соответствовать 2-му полю из этой таблицы?
То есть ptrSz для aByte() As Byte равно 1, aBool() As Boolean равно 2 и так далее?
0
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
03.06.2024, 14:47
Цитата Сообщение от Jack Famous Посмотреть сообщение
И константа ptrSz та же будет?
Простой пример работы CopyMemory
Visual Basic
1
2
CopyMemory d1#, d#2, Len(d1) 'd1 = d2
CopyMemory ByVal VarPtr(l1&), ByVal VarPtr(l2&), 4 'l1 = l2
Добавлено через 28 минут
Цитата Сообщение от Jack Famous Посмотреть сообщение
То есть ptrSz для aByte() As Byte равно 1
Это константа - размер указателя
Цитата Сообщение от testuser2 Посмотреть сообщение
#If Win64 Then
Private Const ptrSz^ = 8
#Else
Private Const ptrSz& = 4
#End If
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
03.06.2024, 16:26  [ТС]
testuser2, спасибо
Цитата Сообщение от testuser2 Посмотреть сообщение
Len(d1)
а это разве не константа для Double, равная 8ми (вне зависимости от разрядности офиса)?
Цитата Сообщение от testuser2 Посмотреть сообщение
4
это константа размера указателя для x32. Тут я понял.

Если копируем указатели, как во 2ом варианте (или со строками), то обязательно обнуляем источник — верно?
Если копируем значения, то можно и не обнулять [значения] — правильно?

Просто, из-за RtlMoveMemory я подумал, что происходит ПЕРЕМЕЩЕНИЕ — отсюда и непонятки с вопросами…
0
1337 / 776 / 86
Регистрация: 08.02.2017
Сообщений: 2,975
Записей в блоге: 1
03.06.2024, 17:47
Цитата Сообщение от Jack Famous Посмотреть сообщение
Просто, из-за RtlMoveMemory я подумал, что происходит ПЕРЕМЕЩЕНИЕ — отсюда и непонятки с вопросами…
Это именно, что копирование. Метод move означает, что сначала функция копирует данные во временный буфер, а уже затем из него копирует в место назначения. Это безопасный метод копирования, который позволяет скопировать данные без помех, даже если области "источника" перекрывается с областью "приемника". К слову, есть RtlCopyMemory, которая работает по принципу "copy" - копирование напрямую (без промежуточного буфера). Присвоения в VB (которые есть копирования) работают по принципу move.

Добавлено через 6 минут
Цитата Сообщение от Jack Famous Посмотреть сообщение
а это разве не константа для Double, равная 8ми (вне зависимости от разрядности офиса)?
Если надо скопировать 8 байт (Data, Double, LongLong), указываешь 8, если 4 то 4(Long, Single) и т.д. 3й параметр - это размер
1
927 / 360 / 43
Регистрация: 10.05.2021
Сообщений: 1,539
Записей в блоге: 10
03.06.2024, 17:47  [ТС]
testuser2, спасибо. А остальные мои вопросы и уточнения?
А — вижу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2024, 17:47
Помогаю со студенческими работами здесь

Скопировать элементы одного массива в другой без повторений
Здравствуйте! Найдите плиз ошибку в моем Г-коде #include<iostream> #include<time.h> #include<stdlib.h> using...

Из одного массива скопировать в другой массив те элементы, в которых в двоичной записи 0 больше чем 1
Суть задачи из одного массива скопировать те элементы, в которых в двоичной записи 0 больше чем 1, в другой массив. В массиве типа short....

Как добавить/удалить элементы одного ListBox в/из другой/другого
Всем доброго вечера! Есть два листбокса, в одном данные: название и сумма, при нажатии кнопки + или - во второй лист или добавляются и...

Как скопировать без цикла, первые 3 элемента массива в другой массив?
Как скопировать без цикла (for,foreach) первые 3 элемента массива в другой массив?

Записать элементы одномерного массива в двумерную матрицу одним циклом
записать элементы из int massive записать все элементы в int array ) одним циклом


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »