標準クエリ演算子サンプル

[.net]標準クエリ演算子サンプル

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ShugoTest
{
    class Person
    {
        public string name = string.Empty;
        public int old = 0;
        
        public Person(string name, int old) 
        {
            this.name = name;
            this.old = old;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int[] datas = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

                //配列の合計をForEachで計算します
                int sum = 0;
                Array.ForEach<int>(datas, (x) => { sum += x; });
                Console.WriteLine("sum:" + sum.ToString());

                //条件に一致するものを取得します
                Console.WriteLine("");
                List<int> l = new List<int>(datas);
                List<int> rl1 = l.FindAll((x) => x > 2);
                foreach (var item in rl1) { Console.WriteLine(item); }

                //条件によりフィルター処理を行います
                Console.WriteLine("");
                var rl2 = l.Where((x) => x > 5);
                foreach (var item in rl2) { Console.WriteLine(item); }

                //条件により新しいフォームに射影します
                Console.WriteLine("");
                var rl3 = l.Select((x) => x > 5);
                foreach (var item in rl3) { Console.WriteLine(item); }

                //リストをソートします
                Console.WriteLine("");
                List<int> ll = new List<int>(datas);
                ll.Sort((int x, int y) => { return y - x; });
                foreach (var item in ll) { Console.WriteLine(item); }

                //配列の型の変換を行います
                Console.WriteLine("");
                string[] str_datas = { "1", "2", "3", "4", "5", "6" };
                var fieldIndex = Array.ConvertAll<string, int>(str_datas, (x) => int.Parse(x) + 1);
                foreach (var item in fieldIndex) { Console.WriteLine(item.ToString()); }

                //リストの型の変換を行います
                Console.WriteLine("");
                List<string> str_datas_list = new List<string>(str_datas);
                var fieldIndex_2 = str_datas_list.ConvertAll<int>((x) => int.Parse(x));
                fieldIndex_2.ForEach((x) => Console.WriteLine(x));

                //リストの型の変換を行います
                Console.WriteLine("");
                List<string> lll = str_datas_list.ConvertAll<string>((x) => x + "AAA");
                lll.ForEach((x) => Console.WriteLine(x));

                //ForEachでは変更不可となる
                Console.WriteLine("");
                str_datas_list.ForEach((x) => x += 2);
                Console.WriteLine(string.Join(",", str_datas_list.ToArray()));
                
                //最大値を求めます
                Console.WriteLine("");
                Console.WriteLine(str_datas_list.Max());
                
                //スキップし、残りの要素を取得します
                Console.WriteLine("");
                Console.WriteLine(string.Join(",", str_datas_list.Skip(3)));

                //リストの合計を計算します
                Console.WriteLine("");
                Console.WriteLine(str_datas_list.Sum((x) => int.Parse(x)));
                
                //リストの先頭から指定された要素の連続を取得します
                Console.WriteLine("");
                Console.WriteLine(str_datas_list.Take(3).Sum((x) => int.Parse(x)));

                //重複なしデータを取得します
                Console.WriteLine("");
                int[] intDatas = { 1, 2, 3, 4, 1, 2, 3, 4 };
                Console.WriteLine(string.Join(",", intDatas.Distinct()));
                List<int> intDataList = new List<int>(intDatas);
                intDataList.Distinct();
                intDataList.ForEach((x) => Console.WriteLine(x));

                //count
                Console.WriteLine("");
                Console.WriteLine(intDatas.Count());
                Console.WriteLine(intDatas.Count<int>(x => x > 3));
                
                //group
                Person[] persons = 
                {
                    new Person("oda",20),
                    new Person("kawai",20),
                    new Person("nakamura",22),
                    new Person("hayashi",20),
                    new Person("murata",22),
                };

                //IGrouping<int, Person> ii = persons.GroupBy(x => x.old);
                var ii = persons.GroupBy(x => x.old);
                foreach (var item in ii)
                {
                    Console.WriteLine("■" + item.Key);
                    foreach (var item2 in item)
                    {
                        Console.WriteLine(string.Format("{0}({1})", item2.name, item2.old));
                    }
                }


                Console.WriteLine("press any key to exit.");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.ReadLine();
            }
        }
    }
}