Сопоставьте элементы в 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);
Ответ Дрю довольно хорошо показывает, что +=
с массивами в 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 }
}
Получили эти результаты с помощью приведенной ниже команды, 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)
}