Для PowerShell ArrayList, который быстрее. Добавить или + = оператор?

Сопоставьте элементы в array2 с свойством label элемента в array1 с соответствующим value:

array2                      // Take array2 and
  .map(                     // map
    function(n) {           // each element n in it to
      return array1         // the result of taking array1
        .find(              // and finding
          function(e) {     // elements
            return          // for which 
              e.value       // the value property
              ===           // is the same as 
              n;            // the element from array2
          }
        )
        .label              // and taking the label property of that elt
      ;
    }
  )
;

Без комментариев и в ES6:

array.map(n => array1.find(e => e.value === n).label);
3
задан Ansgar Wiechers 16 January 2019 в 11:31
поделиться

2 ответа

Ответ Дрю довольно хорошо показывает, что += с массивами в PowerShell не работает; Вы уже нашли причину в своем вопросе (каждый раз создается новый массив, копируются все элементы и т. д.).

Обратите внимание, что ArrayList - не единственная альтернатива. Иногда просто изменить способ, которым вы делаете вещи, будет большая разница; например, циклы и итерации распространены в PowerShell, и создание массива выходных данных по присваиванию очень быстро, а также, на мой взгляд, лучше синтаксис.

Сравните это (2s 406ms):

Measure-Command -Expression {
    $a = @()
    1..10000 | % { $a += 

Ответ Дрю довольно хорошо показывает, что += с массивами в PowerShell не работает; Вы уже нашли причину в своем вопросе (каждый раз создается новый массив, копируются все элементы и т. д.).

Обратите внимание, что ArrayList - не единственная альтернатива. Иногда просто изменить способ, которым вы делаете вещи, будет большая разница; например, циклы и итерации распространены в PowerShell, и создание массива выходных данных по присваиванию очень быстро, а также, на мой взгляд, лучше синтаксис.

Сравните это (2s 406ms):

[110]

с этим (60ms):

Measure-Command -Expression {
    $a = 1..10000 | % { 

Ответ Дрю довольно хорошо показывает, что += с массивами в PowerShell не работает; Вы уже нашли причину в своем вопросе (каждый раз создается новый массив, копируются все элементы и т. д.).

Обратите внимание, что ArrayList - не единственная альтернатива. Иногда просто изменить способ, которым вы делаете вещи, будет большая разница; например, циклы и итерации распространены в PowerShell, и создание массива выходных данных по присваиванию очень быстро, а также, на мой взгляд, лучше синтаксис.

Сравните это (2s 406ms):

[110]

с этим (60ms):

[111]*2 } }
*2 } }

с этим (60ms):

Measure-Command -Expression {
    $a = 1..10000 | % { 

Ответ Дрю довольно хорошо показывает, что += с массивами в PowerShell не работает; Вы уже нашли причину в своем вопросе (каждый раз создается новый массив, копируются все элементы и т. д.).

Обратите внимание, что ArrayList - не единственная альтернатива. Иногда просто изменить способ, которым вы делаете вещи, будет большая разница; например, циклы и итерации распространены в PowerShell, и создание массива выходных данных по присваиванию очень быстро, а также, на мой взгляд, лучше синтаксис.

Сравните это (2s 406ms):

[110]

с этим (60ms):

[111]*2 } }
0
ответ дан briantist 16 January 2019 в 11:31
поделиться

Получили эти результаты с помощью приведенной ниже команды, 10 000 итераций.

.add() взял 0s 45.2869ms

+= взял 2s 900.2777 ms

Measure-Command -Expression {
    $i = 0
    $myArrayList = New-Object System.Collections.ArrayList
    Do {
        #$myArrayList.add($i)
        $myArrayList += $i
        $i++
    } While ($i -lt 10000)
}
0
ответ дан Drew 16 January 2019 в 11:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: