前エントリ:夢の競演みたび
えムナウさんから
C#になったんであれば一言。
関数型が好きというコメントよりも。
ToList() の意味を聞くべきだったんじゃないかな?
loop なしの List => List にこだわったんだと思うが。
プログラム的には無駄。
こんなコメントいただきました。
まず、ToList()の意味ですが、これはIEnumerable<T>をループでぶん回してList<T>を作るってメソッドだと、私は認識してみます。
そして、Where()もループぶん回すので、都合2回ループ処理が行われます。このあたりが「プログラム的には無駄。」と指摘されたと思ってます。(合ってます?)
であれば、ループの回数は極力少なくするにはどうするか。Where()の戻り値はIEnumerable<T>なので、そのまま列挙して表示しちゃいましょう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Cat
{
public string Name { get; set; }
public string Type { get; set; }
}
class Program
{
static void Main(string[] args)
{
var nyans = new List<Cat>() {
new Cat{Name="しゅうたん", Type="アメショ" },
new Cat{Name="ろり", Type="アメショ" },
new Cat{Name="みずきちゃん", Type="スコティ" },
new Cat{Name="マグさん", Type="ほげ" }
};
var typedNyans = nyans.Where(x => x.Type != "ほげ");
foreach(var nyan in typedNyans) {
Console.WriteLine("{0}は{1}", nyan.Name, nyan.Type);
}
}
}
}
25-29行目が変わった所です。まず、25行目でWhere()の結果をtypedNyansで受け取った後、27-29行目でforeachで処理します。前回使ったForEach()はList<T>のメソッドなので、今回は使えません。
#IEnumerable<T>にForEach()が欲しいと思うのは私だけ?