■46228 / inTopicNo.24) |
Re[4]: List<T>.FindAll() で順序は維持されるか? |
□投稿者/ ななし (13回)-(2010/01/28(Thu) 15:43:20)
|
■No46210 (みきぬ さん) に返信
> ドキュメントレベルで保証したいんですね。
「MSDN ライブラリに書かれていること」でしたら、やっぱり文章を変えてもらうしかないですね。
ところで、foreach は IEnumerable に依存しますが、IEnumerable は実装しだいになっちゃうので、■No46182 にて、みきぬさんが現状書かれてるコードでも、順序が 100% 保障されているわけじゃないですね。 IEnumerable のことは、επιστημηさんがすでに ■No46176 で疑問を投げかけて ■No46178 で回避されてる話なので、すでに直されたかもしれませんけど。
■No46213 (επιστημη さん) に返信
> wikipediaを根拠にしちゃダメちゃいます?
私は大好きなんですけど、そういえばそうでした。
> たとえばそのページの英語版には「先頭から」とは書いてないす。
「先頭から」のことは、私の早とちりでした。 文章の中には何度も「先頭から」の話が出てきますが、 「Searching in reverse order」のところには、逆順にすることの優位性も書かれてました。 英語の方見て、情報量の違いにびっくりしました。
■No46220 (なちゃ さん) に返信
> あり得ないと思ってるけど、例えば将来パラレル化されたとしても、多分おかしくはない。
依存しちゃってる人はたくさんいると思うので、今のメソッドの結果が変わるような実装の変更はされないような気はしますけど、ドキュメントに明文化されていない以上、可能性はゼロではないですね。
調べてたら var list = new List<int>() { 0, 1, 2, 3, 4, 5 }; var newList = list.AsParallel().Where((item) => { return true; } ).ToList(); だと変わるらしいのですが、私の環境では結果が確認できませんでした...。 (http://msdn.microsoft.com/ja-jp/magazine/cc163329.aspx を見てると、QueryOptions.PreserveOrdering というのがあるらしいのですが、AsParallel には引数がありませんでした。パラレルの意味が無くなっちゃうから、機能を削除されたとかでしょうか?)
|
|