2017-02-03 26 views
0

配列の最小値を取得し、そのアイテムのインデックスを取得したい、自分のループを書き込まずに1つのステップで(私に知らせてください) 。配列の最小値を取得してからインデックスを取得する

私はちょうど
$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 in $ 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) 
関連する問題