LINQ.Enumerable
讎りヲ
System.Linq.Enumerable繧ッ繝ゥ繧ケ
繝サIEnumerable繧、繝ウ繧ソ繝シ繝輔ぉ繧、繧ケ繧堤カ呎価縺励※縺繧九
繝サ諡。蠑オ繝。繧ス繝繝唄um繧貞ァ九a縲∵ァ倥縺ェ繝。繧ス繝繝峨r螳夂セゥ縺励※縺繧九
窶サ諡。蠑オ繝。繧ス繝繝峨↓縺、縺縺ヲ縺ッ縲繧ェ繝悶ず繧ァ繧ッ繝域欠蜷托シ 迚ケ谿翫↑繧ッ繝ゥ繧ケ/諡。蠑オ繝。繧ス繝繝縲阪r蜿らァ縲
public static class System.Linq.Enumerable
{
縲public static int Sum(this IEnumerable<int> source);
}
諡。蠑オ繝。繧ス繝繝峨ョ螳夂セゥ縺ョ邨先棡縲‖ry.Sum() 縺悟庄閭ス
窶サary縺ッIEnumerable<int>蝙九ョ螟画焚
IEnumerable<int>蝙九ョ螟画焚繧貞ョ」險縺吶k縺ォ縺ッ縲
var
繧堤畑縺繧九
縺ェ縺翫!Enumerable繧、繝ウ繧ソ繝シ繝輔ぉ繧、繧ケ繧堤カ呎価縺励◆繧ェ繝悶ず繧ァ繧ッ繝医ョ謫堺ス懊ッ縲
LINQ to Object縺ォ蛻鬘槭&繧後k縲
繝サLINQ to SQL (繝繝シ繧ソ繝吶シ繧ケ繧ェ繝悶ず繧ァ繧ッ繝茨シ哘ntity Framework縺ォ蟇セ縺吶k謫堺ス)
繝サLINQ to XML
IEnumerable繧、繝ウ繧ソ繝シ繝輔ぉ繧、繧ケ諡。蠑オ繝。繧ス繝繝
var people = new[]{
縲縲new { Name="荳驛", Height=160, Weight=50 },
縲縲new { Name="莠碁ヮ", Height=170, Weight=60 },
縲縲new { Name="荳蛾ヮ", Height=180, Weight=70 }
};
var WeightSum = people.Sum(person => person.Weight);
// 竍 Weightsum : 180
謨ー
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5 };
int count = numbers.Count();
// count : 6
譛螟ァ蛟、
int max = numbers.Max();
// max : 5
//譛螟ァ縺ョ(霄ォ髟キ-菴馴)繧呈アゅa繧九
var judgeValue = people.Max(person => person.Height – person.Weight);
// judgeValue : 110
譛蟆丞、
int min = numbers.Min();
// min : 0
蟷ウ蝮蛟、
double avr = numbers.Average();
// avr : 2.5
騾先ャ。蜃ヲ逅
each繝サforeach
foreach(var i in ary)
{
縲縲Console.WriteLine(i);
縲縲竍 0 1 2 3 4 5
}
謚ス蜃コ
蜀吝ワ(map繝サselect)
var map = ary.Select(elm => elm * 2);
OfType
foreach (var elm in myObj.Select(n => n is string)) Console.Write(elm);
foreach (var elm in myObj.OfType<string>()) Console.Write(elm);
var list = new List<string>();
list.AddRange(myObj.OfType<string>());
繝輔ぅ繝ォ繧ソ繝シ(filter繝サwhere)
var map = ary.Where(elm => elm == 2);
蟾ョ蛻繝サ蜈ア騾夐繝サ驥崎、蜑企勁
var allAry = Enumerable.Range(start: 1, count: 10);
int[] exceptAry = { 3, 7 };
var newAry = allAry.Except(second: exceptAry).ToArray();
蟾ョ蛻繧貞叙蠕
newAryシ1 2 4 5 6 8 9 10
Intersect
int[] ary1 = { 1, 3, 4, 5, 7, 9 };
int[] ary2 = { 2, 3, 5, 6, 9 };
var newAry = ary1.Intersect(second: ary2).ToArray();
蜈ア騾壼、繧貞叙蠕
newAryシ3 5 9
Union
int[] ary1 = { 1, 2, 3, 3 };
int[] ary2 = { 2, 3, 4, 4 };
var newAry = ary1.Union(second: ary2).OrderBy(_ => _).ToArray();
竊1, 2, 3, 4
窶サ驥崎、繧ょ炎髯、縺輔l繧
Distinct
int[] ary = { 0, 1, 1, 2, 3, 3, 4, 5, 5 };
var distinct = ary.Distinct();
諡。蠑オ蟄舌ョ驥崎、繧貞炎髯、縺励※謚ス蜃コ
竍 distinct : 0 1 2 3 4 5
string[] oldAry = { "a.txt", "b.txt", "c.jpg", "d.doc", "e.txt" };
string[] newAry = oldAry.Select(x => Path.GetExtension(x)).Distinct().ToArray();
newAryシ嗾xt jpg doc
謖螳壹ョ隕∫エ
var rnd = new Random(Seed: 0);
var ary = Enumerable.Repeat(element: 0, count: 10000).Select(_ => rnd.Next());
var target1 = ary.ElementAt(index: 4649);
var target2 = ary.ElementAtOrDefault(index: 4649);
Take/Skip
int[] ary = { 1, 2, 3, 4, 5 };
ary = ary.Take(3).Concat(new int[] { 0 }).Concat(ary.Skip(3)).ToArray();
竊1, 2, 3, 0, 4, 5
SkipWhile/TakeWhile
int[] myInt = Enumerable.Range(start: 1, count: 100).ToArray();
var ary = myInt.SkipWhile(n => n < 10).TakeWhile(n => n < 21);
ary:10ス20
int sum = 0;
foreach (var n in Enumerable.Range(1, int.MaxValue).TakeWhile(c => sum < 100))
{
縲sum += 1;
縲Console.WriteLine(sum);
}縲
譚。莉カ縺梧千ォ九☆繧矩俣縺ッ螳溯。
First
窶サ蟇セ雎。縺檎┌縺蝣エ蜷茨シ壻セ句、也匱逕
FirstOrDefault
窶サ蟇セ雎。縺檎┌縺蝣エ蜷茨シ壼梛縺ョ繝繝輔か繝ォ繝亥、(0,null遲)
Last
窶サ蟇セ雎。縺檎┌縺蝣エ蜷茨シ壻セ句、也匱逕
LastOrDefault
窶サ蟇セ雎。縺檎┌縺蝣エ蜷茨シ壼梛縺ョ繝繝輔か繝ォ繝亥、(0,null遲)
int?[] ary = { 0, 1, 2 };
var my1st = ary.First(n => n < 2);
var my1st = ary.FirstOrDefault(n => n < 2);
var my1st = ary.Last(n => n < 2);
var my1st = ary.LastOrDefault(n => n < 2);
int?[] ary = { 0, 1, 2 };
var my1st = ary.FirstOrDefault(n => n > 2) ?? -1;
竊誰ull 竊 -1
Single / SingleOrDefault
int[] ary1 = { 2 };
int[] ary2 = { };
int[] ary3 = { 2, 3 };
int sglValue1 = ary1.Single();
竊2
int sglValue2 = ary2.Single();
竊貞ョ溯。梧凾萓句、
int sglValue2 = ary2.SingleOrDefault();
竊0
int sglValue3 = ary3.SingleOrDefault();
竊貞ョ溯。梧凾萓句、
DefaultIfEmpty
string[] ary = { };
foreach (var elm in ary.DefaultIfEmpty(defaultValue: @"縺ゅj縺セ縺帙s縲")) Console.WriteLine(elm);
隕∫エ謨ーシ0 縺ョ蝣エ蜷医ョ蛟、繧呈欠螳(蜷悟梛縺ョ蛟、縺ョ縺ソ)
繧ュ繝」繧ケ繝
string[] str = obj.Cast<string>().ToArray();
int[] myInt = { 1, 2, 3 };
long[] myLong = myInt.Cast<long>().ToArray();
竊偵お繝ゥ繝シシ咾ast縺ッ蜿らァ蝙九↓縺励°菴ソ逕ィ縺ァ縺阪↑縺
long[] myLong = myInt.Select(n => (long)n).ToArray();
鬆蠎
荳ヲ縺ウ譖ソ縺(sort)
var orderBy = people.OrderBy(person => person.Height);
OrderByDecending
var orderByDec = people.OrderByDescending(person => person.Height);
DateTime[] ary = new DateTime[]
{
縲new DateTime(year: 2010, month: 1, day: 1),
縲new DateTime(year: 2001, month: 1, day: 1),
縲new DateTime(year: 2005, month: 1, day: 1),
縲new DateTime(year: 2003, month: 1, day: 1)
};
var newary1 = ary.OrderBy(n => n);
シ戡rray.Sort(ary, (x, y) => Math.Sign(x.Ticks – y.Ticks));
ThenBy
var ThenBy = people.OrderBy(person => person.Height).ThenBy(person => person.Weight);
ThenByDecending
var ThenByDec = people.OrderBy(person => person.Height).ThenByDescending(person => person.Weight);
Sort
var list = new List<DateTime>() {
縲DateTime.Now, DateTime.MinValue, DateTime.MaxValue };
list.Sort((x, y) => Math.Sign(x.Ticks – y.Ticks));
list.ForEach( c => Console.WriteLine(c) );
蜿崎サ「
// 竍 5 4 3 2 1 0
蛻、螳
ALL繝サANY
bool judge = ary.All( elm => elm > 3);
蜈ィ縺ヲ縺ョ隕∫エ縺梧擅莉カ繧呈コ縺溘☆縺句凄縺具シ
bool judge = ary.Any( elm => elm > 3);
縺ゥ繧後°1縺、縺ョ隕∫エ縺梧擅莉カ繧呈コ縺溘☆縺句凄縺具シ
int[] ary1 = { 1, 3, 4, 5, 7, 9 };
int[] ary2 = { 2, 3, 5, 6, 9 };
int[] ary3 = { 1, 3, 4, 5, 7, 9 };
bool judge2 = ary1.SequenceEqual(second: ary2);
judge2シ喃alse
bool judge3 = ary1.SequenceEqual(second: ary3);
judge3シ嗾rue
蜈ィ縺ヲ縺ョ隕∫エ縺御ク閾エ縺吶k縺具シ
Contains
// isContain : true
驟榊励サ繧キ繝シ繧ア繝ウ繧ケ(蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝)菴懈
繧キ繝シ繧ア繝ウ繧ケ(蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝)
IEnumerable<T>蝙句、画焚
騾」邨
List<int> myList = new List<int> { 0,0,0,0,0 };
var concat = numbers.Concat(second: myList);
竍 0 1 2 3 4 5 0 0 0 0 0
遽蝗イ繝サ郢ー繧願ソ斐@
range : 1 2 3 4 5 6 7 8 9 10
var repeat = Enumerable.Repeat(element: "a", count: 5);
repeat : "a" "a" "a" "a" "a"
譁蟄怜 "aaaaa"縺ァ縺ッ縺ェ縺縲る榊励
遨コ縺ョ繧キ繝シ繧ア繝ウ繧ケ(蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝)菴懈
窶サ繧キ繝シ繧ア繝ウ繧ケ(蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝)竕驟榊励
IEnumerable繧堤カ呎価縺励◆繧ェ繝悶ず繧ァ繧ッ繝
int cnt1 = ary1.Count();
cnt1シ0
var ary2 = Enumerable.Empty<int>();
int cnt2 = ary2.Count();
cnt2シ0
繝繧ュ繧ケ繝医ヵ繧。繧、繝ォ縺九i
string[] s1 = File.ReadAllLines(@"D:\test.txt", Encoding.Default);
陦悟腰菴阪〒蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝医↓譬シ邏(驕蟒カ螳溯。)
var s2 = File.ReadLines(@"D:\test.txt", Encoding.Default);
譚。莉カ縺ォ蜷医≧陦後r蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝医↓譬シ邏(驕蟒カ螳溯。)
var s3 = File.ReadLines(@"D:\test.txt", Encoding.Default).Where(x => x.Equals(@"test1"));
譚。莉カ縺ォ蜷医≧陦梧焚繧貞叙蠕(驕蟒カ螳溯。)
int cnt = File.ReadLines(@"D:\test.txt", Encoding.Default).Count(x => x.ToString().Contains(@"test"));
蛻玲嫌繧ェ繝悶ず繧ァ繧ッ繝医ョ譖ク霎シ
static IEnumerable<string> returnString()
{
縲yield return @"test1";
縲yield return @"test2";
}
File.WriteAllLines(@"D:\test.txt", returnString());
File.WriteAllLines(@"D:\test.txt", Enumerable.Range(ス));
繝輔ぃ繧、繝ォ諠蝣ア
var files = Directory.EnumerateFiles(
縲path: @"D:\a",縲讀懃エ「髢句ァ九ョ繧」繝ャ繧ッ繝医Μ
縲searchPattern: "?0.txt",縲讀懃エ「繝代ち繝シ繝ウ
縲searchOption: SearchOption.AllDirectories);
SearchOption.TopDirectoryOnly縲謖螳壹ョ繧」繝ャ繧ッ繝医ョ縺ソ
SearchOption.AllDirectories縲繧オ繝悶サ繝繧」繝ャ繧ッ繝医b蜷ォ繧√k
files.ToList().ForEach(x => Console.WriteLine(x));
string fileNm1 = files.First();
string fileNm2 = files.Last();
var files = Directory.EnumerateDirectories(
縲path: @"D:\a",縲讀懃エ「髢句ァ九ョ繧」繝ャ繧ッ繝医Μ
縲searchPattern: "?0",縲讀懃エ「繝代ち繝シ繝ウ
縲searchOption: SearchOption.AllDirectories);
SearchOption.TopDirectoryOnly縲謖螳壹ョ繧」繝ャ繧ッ繝医ョ縺ソ
SearchOption.AllDirectories縲繧オ繝悶サ繝繧」繝ャ繧ッ繝医b蜷ォ繧√k
縺昴ョ莉
逡ウ縺ソ霎シ縺ソ(fold繝サAggregate)
var map = ary.Aggregate((pSum, elm) => pSum + elm);
蜿ウ霎コ縺ョ邨先棡繧貞キヲ霎コ縺ョ隨ャ荳蠑墓焚縺ィ縺吶k
隨ャ荳蠑墓焚縺ョ蛻晄悄蛟、縺ッ0シ 隨ャ莠悟シ墓焚縺ッ驟榊励ョ蛟、縺鍬oop縺輔l繧
pSum + elm 竊 pSum
var map = ary.Aggregate((pMax, elm) => (pMax < elm) ? elm : pMax);
蜿ウ霎コ縺ョ邨先棡繧貞キヲ霎コ縺ョ隨ャ荳蠑墓焚縺ィ縺吶k
隨ャ荳蠑墓焚縺ョ蛻晄悄蛟、縺ッ0シ 隨ャ莠悟シ墓焚縺ッ驟榊励ョ蛟、縺鍬oop縺輔l繧
(pMax < elm) ? elm : pMax
if (pMax < elm) {
縲pMax = elm
}else{
縲pMax = pMax
}
var map = ary.Aggregate(10, (pCnt, elm) => pCnt += 1);
謖螳夂┌縺礼ャャ荳蠑墓焚縺ョ蛻晄悄蛟、縺ッ0縲 隨ャ莠悟シ墓焚縺ッ驟榊励ョ蛟、縺鍬oop縺輔l繧
譏守、コ逧縺ォ蛻晄悄蛟、繧剃ク弱∴繧倶コ九b蜿ッ閭ス