データの操作をするときはLINQを使うとスマートに実装できる。
github
https://github.com/ma-ak2011/LINQ
用意したデータ
LINQ.cs
//芸能人好感度ランキングから名前を借りました。出身地や年齢は加工しています。
var people = new List<Person>
{
new Person { Name = "明石家さんま", Age = 63, Gender = Gender.Male, BirthPlace = "東京都"},
new Person { Name = "阿部寛", Age = 54, Gender = Gender.Male, BirthPlace = "神奈川県"},
new Person { Name = "マツコ・デラックス", Age = 46, Gender = Gender.Male, BirthPlace = "千葉県"},
new Person { Name = "内村光良", Age = 54, Gender = Gender.Male, BirthPlace = "熊本県"},
new Person { Name = "新垣結衣", Age = 30, Gender = Gender.Female, BirthPlace = "神奈川県"},
new Person { Name = "浅田真央", Age = 28, Gender = Gender.Female, BirthPlace = "東京都"},
new Person { Name = "綾瀬はるか", Age = 33, Gender = Gender.Female, BirthPlace = "熊本県"}
};
最初の一行を取得する
LINQ.cs
var first = people.First();
//明石家さんま 63才 男 東京都出身
男性を取得する
LINQ.cs
var men = people.Where(p => p.Gender == Gender.Male).ToList();
//明石家さんま 63才 男 東京都出身
//阿部寛 54才 男 神奈川県出身
//マツコ・デラックス 46才 男 千葉県出身
//内村光良 54才 男 熊本県出身
女性から一人取得する
LINQ.cs
var firstFemale = people.First(p => p.Gender == Gender.Female);
//新垣結衣 30才 女 神奈川県出身
熊本県出身の人がいるかどうか
LINQ.cs
var existPersonFromKumamoto = people.Any(p => p.BirthPlace == "熊本県");
//True
全員男性かどうか
LINQ.cs
var areAllMale = people.All(p => p.Gender == Gender.Male);
//False
年齢で昇順に並べる
LINQ.cs
var orderedByAge = people.OrderBy(p => p.Age).ToList();
//浅田真央 28才 女 東京都出身
//新垣結衣 30才 女 神奈川県出身
//綾瀬はるか 33才 女 熊本県出身
//マツコ・デラックス 46才 男 千葉県出身
//阿部寛 54才 男 神奈川県出身
//内村光良 54才 男 熊本県出身
//明石家さんま 63才 男 東京都出身
年齢で降順に並べた後、名前で昇順に
LINQ.cs
var orderedByAgeThenByName = people.OrderByDescending(p => p.Age).ThenBy(p => p.Name).ToList();
//明石家さんま 63才 男 東京都出身
//阿部寛 54才 男 神奈川県出身
//内村光良 54才 男 熊本県出身
//マツコ・デラックス 46才 男 千葉県出身
//綾瀬はるか 33才 女 熊本県出身
//新垣結衣 30才 女 神奈川県出身
//浅田真央 28才 女 東京都出身
出身地ごとにグループにして、グループを出身地の県名の順に並べる
LINQ.cs
var groupByAndOrderedBy = people.GroupBy(p => p.BirthPlace).OrderBy(g => g.Key).ToList();
//熊本県
//内村光良 54才 男 熊本県出身
//綾瀬はるか 33才 女 熊本県出身
//神奈川県
//阿部寛 54才 男 神奈川県出身
//新垣結衣 30才 女 神奈川県出身
//千葉県
//マツコ・デラックス 46才 男 千葉県出身
//東京都
//明石家さんま 63才 男 東京都出身
//浅田真央 28才 女 東京都出身
年齢だけ一覧にしたい
LINQ.cs
var ages = people.Select(p => p.Age).ToList();
//63
//54
//46
//54
//30
//28
//33
出身地だけ一覧にして重複を消したい
LINQ.cs
var birthPlaces = people.Select(p => p.BirthPlace).Distinct().ToList();
//東京都
//神奈川県
//千葉県
//熊本県
年齢の最小値、最大値、平均値、合計値を取得したい
LINQ.cs
var min = people.Min(p => p.Age);
//最小値:28
var max = people.Max(p => p.Age);
//最大値:63
var average = people.Average(p => p.Age);
//平均値:44
var sum = people.Sum(p => p.Age);
//合計値:308
LINQみたいなことをJavaScriptでしたい人はこちら lodash