2017-02-03 9 views
0

Я хочу получить минимальное значение в массиве, а затем получить индекс этого элемента за один шаг, не записывая собственный цикл (если мне нужно сообщить мне об этом) ,Получите минимальное значение в массиве, а затем получите индекс

Я знаю, что могу просто сделать
$b = ($a | Measure -Minimum).Minimum
Но тогда я должен сделать
[array]::IndexOf($a, $b)
И хотя это, как правило, хорошо, я ищу способ сделать это один раз, потому что я бегу это МНОГИЕ МНОГИЕ времена в цикле.

Спасибо!

EDIT: Один шаг смысл без зацикливания через массив дважды

+1

Что вы хотите случиться в экземпляр, в котором есть несколько записей в вашем массиве, которые имеют минимальное значение? Например, в этом массиве '1, 2, 3, 1, 4' было бы возвращено более одного индекса, если вы получили индекс минимального значения. – Toomaja

+1

@Toomaja Все значения в массиве уникальны, извинения за то, что они не указали это в главном сообщении. – Mark

ответ

1

Лично я мог бы рассмотреть другую структуру данных. Может быть, что-то отсортирован, чтобы начать с ...

Этот код может работать для ваших нужд:

$myArray = 5,66,4,33,2,9,9,12 


$index = 0 
$minIndex = 0 
$minValue = [int]::MaxValue 
$myArray | % { if ($minValue -gt $_) {$minValue = $_; $minIndex = $index}; $index++ } 

"MinIndex $minIndex = MinValue $minValue" 
+0

FYI, итерация конвейера со скриптблоком значительно медленнее, чем 'foreach ($ el в $ myArray) {}' – wOxxOm

+0

@wOxxOm: True. Не оптимизировался для perf, а скорее фокусировался на O (n). –

+0

@KoryGill Я мог бы это отсортировать, но, как я уже сказал, он будет проходить много раз, и нет никакого способа сохранить сортировку, не переделывая ее каждый проход. Вы предлагаете сортировать его каждый раз или просто использовать мой собственный метод итерации через массив и получение индекса минимального значения? – Mark

1

сво проблема типа, попробуйте так:

$myArray = [int[]]5,66,4,33,2,9,9,12 
$minvalue=[int]($myArray | measure -Minimum).Minimum 
$myArray.IndexOf($minvalue) 

 Смежные вопросы

  • Нет связанных вопросов^_^