3

複数のソースから履歴項目の個別のリストを作成する必要があり、最新の項目が保持されます。私はこのようなことを試みていますが、問題のドメインのため、結果が正確であることを確認するのは簡単ではありません.

Function GetUnique {
    param( $source1, $source2, ...)

    $items = $source1 + $source2 + ...;

    $unique = $items | Sort-Object -Desc -Unique -Prop Timestamp;

    # Does this contain the most recent items?

    $unique;
}

好みを示す -Stable スイッチがないことにかなり驚いています。

注: 並べ替えが安定している場合でも、一意性アルゴリズムについて仮定していることは承知しています。ソートが安定している場合、安定したソート済み入力を前提とする独自の安定した Get-Unique コマンドレットを比較的簡単に作成できます。ただし、MergeSort を実装したくありません。

4

1 に答える 1

4

したがって、私のシナリオを捨てた後、並べ替えが実際には安定していないことを示す簡単なテストを見つけましたが、どういうわけか安定した方法でシーケンスを逆にします。私が使用しているテスト セットは非常に小さいため、これらの結果は決定的ではない可能性がありますが、再現可能であることに注意してください。

function f ([String] $name, [int] $value) `
{
    return New-Object PSObject -Property @{ Name=$name; Value=$value } | 
        select Name,Value; 
};
$test = (f a 1),(f a 2),(f a 3),(f b 1),(f b 2);
"`n`$test;"
$test;
"`n`$test | sort name;"
$test | sort name;
"`n`$test | sort name -Desc;"
$test | sort name -Desc;
"`n`$test | sort name | sort name;"
$test | sort name | sort name;
"`n`$test | sort value | sort name;"
$test | sort value | sort name;
"`n`$test | sort value;"
$test | sort value;

結果は次のとおりです。

$test;
Name                                                  Value
----                                                  -----
a                                                         1
a                                                         2
a                                                         3
b                                                         1
b                                                         2

$test | sort name;
a                                                         3
a                                                         2
a                                                         1
b                                                         2
b                                                         1

$test | sort name -Desc;
b                                                         1
b                                                         2
a                                                         1
a                                                         2
a                                                         3

$test | sort name | sort name;
a                                                         1
a                                                         2
a                                                         3
b                                                         1
b                                                         2

$test | sort value | sort name;
a                                                         2
a                                                         1
a                                                         3
b                                                         1
b                                                         2

$test | sort value;
b                                                         1
a                                                         1
b                                                         2
a                                                         2
a                                                         3

https://connect.microsoft.com/PowerShell/feedback/details/752455/provide-stable-switch-for-sort-object-cmdletで、これに関する PS チームに提案を提出しました。同意する場合は、賛成票を投じてください。

于 2012-07-05T17:00:01.897 に答える