C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: List<T>.FindAll() で順序は維持されるか? [1]


(過去ログ 78 を表示中)

[トピック内 26 記事 (21 - 26 表示)]  << 0 | 1 >>

■46210 / inTopicNo.21)  Re[2]: List<T>.FindAll() で順序は維持されるか?
  
□投稿者/ みきぬ (750回)-(2010/01/28(Thu) 11:21:51)
2010/01/28(Thu) 11:51:16 編集(投稿者)

No46193 (ななし さん) に返信
> ■No46152 (みきぬ さん) に返信
> >>このメソッドは順次検索を実行します。
>
> 原文は
> This method performs a linear search;
> となってました。
> http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%9E%8B%E6%8E%A2%E7%B4%A2
> にも「先頭から順に」と書いてあるので、大丈夫じゃないでしょうか。
>
日本語だと人によって解釈が変わるのであえて数字にしますと、「95〜99%は大丈夫」といった認識は既に持っているんです。
今までに調べた内容とか、動かした結果とか、ふつーはこういう実装だいう勘とかで。

「100%大丈夫ですよ」てことを、実装ではなくてドキュメントレベルで保証したいんですね。
なんでそうしたいかというと、何かのときに自分の身を守るためです。
# 単に私が心配性なだけ…という説もありますが

> メソッドの解説への記述の追加依頼を出されてはいかがですか?
>
それだと結果が出るのが遅いので、自前のインシデントを使うという手もちょっと考えてみます。
そこまでするような内容か? という気はしますが、乗りかかった船だし、残しておいても宝の持ち腐れなので。

※以下追加

上の文章を書いた後で気がつきましたが、

No46177 (もりお さん) に返信
> ソースを見ずに保証しましょうというお題でしょうか。
>
はその通りですね。
前ページでコメントしたときには、違う風に解釈してしまいましたが…。
引用返信 編集キー/
■46213 / inTopicNo.22)  Re[2]: List<T>.FindAll() で順序は維持されるか?
□投稿者/ επιστημη (2413回)-(2010/01/28(Thu) 11:37:39)
επιστημη さんの Web サイト
> 原文は
> This method performs a linear search;
> となってました。
> http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%9E%8B%E6%8E%A2%E7%B4%A2
> にも「先頭から順に」と書いてあるので、大丈夫じゃないでしょうか。

wikipediaを根拠にしちゃダメちゃいます?
たとえばそのページの英語版には「先頭から」とは書いてないす。

linear-searchは「順序付け可能な集合に対し"次のくれ!"を見つかるまで繰り返すこと」
以上の意味はないと思う。たとえばケツから順に探してもlinear-searchには違いない。

引用返信 編集キー/
■46220 / inTopicNo.23)  Re[3]: List<T>.FindAll() で順序は維持されるか?
□投稿者/ なちゃ (385回)-(2010/01/28(Thu) 12:21:49)
もっと言うと、これは単にアルゴリズム名として書いてるだけで、
検索の負荷に関する情報を提供するためだけの記述ですよね、おそらく。

あり得ないと思ってるけど、例えば将来パラレル化されたとしても、多分おかしくはない。

引用返信 編集キー/
■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 には引数がありませんでした。パラレルの意味が無くなっちゃうから、機能を削除されたとかでしょうか?)

引用返信 編集キー/
■46230 / inTopicNo.25)  Re[5]: List<T>.FindAll() で順序は維持されるか?
□投稿者/ みきぬ (754回)-(2010/01/28(Thu) 18:09:47)
No46228 (ななし さん) に返信
> ところで、foreach は IEnumerable に依存しますが、IEnumerable は実装しだいになっちゃうので、■No46182 にて、みきぬさんが現状書かれてるコードでも、順序が 100% 保障されているわけじゃないですね。

や、そこは疑ってないです。だってリストだもん。

…でも心配なので裏をとってみた。
http://msdn.microsoft.com/ja-jp/library/x854yt9s.aspx
引用返信 編集キー/
■46231 / inTopicNo.26)  Re[6]: List<T>.FindAll() で順序は維持されるか?
□投稿者/ ななし (14回)-(2010/01/28(Thu) 18:20:23)
No46230 (みきぬ さん) に返信
> や、そこは疑ってないです。だってリストだもん。
>
> …でも心配なので裏をとってみた。
> http://msdn.microsoft.com/ja-jp/library/x854yt9s.aspx

そ、そうですね...。
お手数おかけしてすみませんでした。
(本当に駄目だってずっと思ってたので、勉強になりました。)
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -