This is more of a question on what would be (if any) the most efficient way of doing it.
E.g. any accelerators or .Net classes/methods that would be better.
Only looking for native .NET or PS functionality.
I’ve currently solved the problem this way, included example data for easier testing.
$dataSet = @() $dataSet += [PSCustomObject]@{DataName="Data1"; Value1=1; Value2=4; Value3=8;} $dataSet += [PSCustomObject]@{DataName="Data2"; Value1=2; Value2=5; Value3=3;} $dataSet += [PSCustomObject]@{DataName="Data3"; Value1=4; Value2=1; Value3=1;} $Value1 = $dataSet | sort Value1 | select DataName, Value1 $Value2 = $dataSet | sort Value2 | select DataName, Value2 $Value3 = $dataSet | sort Value3 | select DataName, Value3 $rankList = @() foreach($d in $dataSet) { $value1Rank = $Value1.DataName.IndexOf($d.DataName) + 1 $value2Rank = $Value2.DataName.IndexOf($d.DataName) + 1 $value3Rank = $Value3.DataName.IndexOf($d.DataName) + 1 $rankList += [PSCustomObject]@{DataName = $d.DataName Value1Rank = $value1Rank Value2Rank = $value2Rank Value3Rank = $value3Rank TotalScore = $value1Rank + $value2Rank + $value3Rank } }
The above is based on the lower the total score, the better (otherwise the sort would need to be reversed).
So in this case Data3 would get the lowest score of 5.
So the question is, is there a better way of solving the problem?