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

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

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

Re[3]: ループの抜け方


(過去ログ 97 を表示中)

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

■57764 / inTopicNo.1)  ループの抜け方
  
□投稿者/ ひっそり (8回)-(2011/03/14(Mon) 21:47:17)

分類:[C#] 

以下のようなコードで、if文の条件を満たしたら
ループを抜けいたいのですが、どのように記述すればよいのでしょうか?

(以下のように記述すると
”break または continue に対応するループがありません。”
のエラーが出てしまいます。)


----
int[] array = { 1, 2, 3, 4, 5};
int sum = 0;

Array.ForEach<int>(array, (i) =>
{
    sum += i;
    if (sum > 10) break;
});

Console.WriteLine("sum : {0}", sum);
Console.ReadLine();

引用返信 編集キー/
■57765 / inTopicNo.2)  Re[1]: ループの抜け方
□投稿者/ 囚人 (590回)-(2011/03/14(Mon) 22:04:39)
素直にforeach文使ったらいいのでは?

引用返信 編集キー/
■57766 / inTopicNo.3)  Re[2]: ループの抜け方
□投稿者/ ひっそり (9回)-(2011/03/14(Mon) 22:14:38)
返信ありがとうございます。

ForEachの方が、速いと聞いたことがあるので、できればこの形で
ループ抜けたいと思っているのですが、ループ抜ける場合は、
foreach使った方がよいのですね。

No57765 (囚人 さん) に返信
> 素直にforeach文使ったらいいのでは?
>
解決済み
引用返信 編集キー/
■57767 / inTopicNo.4)  Re[1]: ループの抜け方
□投稿者/ shu (513回)-(2011/03/14(Mon) 22:15:27)
No57764 (ひっそり さん) に返信


i => {・・・}の部分はループ処理ではなくラムダ式(関数呼び出しのようなもの)です。
なのでその中はループ処理ではないのでbreakが出来ません。


           Array.ForEach<int>(array, i =>
            {
                if (sum <= 10)
                    sum += i;
            });

としてsumに加算する条件をつけるか


            foreach(int i in array) {
                sum += i;
                if (sum > 10) break;
            }

のように通常のループ処理で行うかです。

引用返信 編集キー/
■57768 / inTopicNo.5)  Re[2]: ループの抜け方
□投稿者/ ひっそり (10回)-(2011/03/14(Mon) 22:23:07)
返信ありがとございます。

foreachで対応しようと思います。

No57767 (shu さん) に返信
> ■No57764 (ひっそり さん) に返信
>
>
> i => {・・・}の部分はループ処理ではなくラムダ式(関数呼び出しのようなもの)です。
> なのでその中はループ処理ではないのでbreakが出来ません。
>
>
> Array.ForEach<int>(array, i =>
> {
> if (sum <= 10)
> sum += i;
> });
>
> としてsumに加算する条件をつけるか
>
>
> foreach(int i in array) {
> sum += i;
> if (sum > 10) break;
> }
>
> のように通常のループ処理で行うかです。
解決済み
引用返信 編集キー/
■57769 / inTopicNo.6)  Re[2]: ループの抜け方
□投稿者/ 節電お願いします (1回)-(2011/03/14(Mon) 23:29:29)
抜けるならreturnですね。
引用返信 編集キー/
■57772 / inTopicNo.7)  Re[3]: ループの抜け方
□投稿者/ shu (514回)-(2011/03/15(Tue) 07:47:14)
2011/03/15(Tue) 07:47:37 編集(投稿者)
No57769 (節電お願いします さん) に返信
> 抜けるならreturnですね。

> Array.ForEach<int>(array, (i) =>
> {
>     sum += i;
>     if (sum > 10) break;
> });

は

-----------------------------

foreach(int i in array) {
    proc(i);
}

void proc(int i) {
    sum += i;
    if (sum > 10) break;
}


-----------------------------
と書くのと同じなので(sumについてはあまり考えないとして)
breakがreturnになってもエラーが表示されないだけで目的は達成出来ないです。

引用返信 編集キー/
■57783 / inTopicNo.8)  Re[3]: ループの抜け方
□投稿者/ くり太郎 (6回)-(2011/03/15(Tue) 13:57:52)
くり太郎 さんの Web サイト
速度の差は、ほとんどないと思います。
行いたいことは流れ制御処理だと思うので foreach の方が適しています。

最初に使用していた方法は、あらかじめ存在するシーケンス全体に対して処理を行う場合に適していて、この方法を使って速度を考慮する場合は、その仕組みまで詳しく理解しなけば、逆に遅くなる危険もあります。

No57766 (ひっそり さん) に返信
> 返信ありがとうございます。
>
> ForEachの方が、速いと聞いたことがあるので、できればこの形で
> ループ抜けたいと思っているのですが、ループ抜ける場合は、
> foreach使った方がよいのですね。
>
> ■No57765 (囚人 さん) に返信
>>素直にforeach文使ったらいいのでは?
>>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -