プログラミングでアイデアを具現化したい

あらゆるものを具現化するためにプログラミングを始めました。主にC#

List<T>とラムダ式の組み合わせ

    class Program {
        static void Main(string[] args) {
            var list = new List<string> {
                "USD/JPY","EUR/JPY","EUR/USD",
                "GBP/JPY","GBP/USD","AUD/JPY",
                "AUD/USD","NZD/JPY","NZD/USD"
            };

            //Exists 引数で指定した条件に一致する要素の存在をtrue/falseで返す
            var exists = list.Exists(str => str[0] == 'N');
            Console.WriteLine(exists);

            //Find 引数で指定した条件と一致する要素を検索し、最初に見つかった要素を返す
            var find = list.Find(str => str == "GBP/JPY");
            Console.WriteLine(find);

            //FindIndex 見つかったインデックスを返す
            var findIndex = list.FindIndex(str => str == "GBP/JPY");
            Console.WriteLine(findIndex);

            //FindAll 引数で指定した条件すべて取得します
            var ccys = list.FindAll(str => str[4] == 'U');
            foreach(var ccy in ccys)
                Console.WriteLine(ccy);

            //RemoveAll 引数で指定した条件に一致する要素をリストから削除します。戻り値は削除した数
            var removeAll = list.RemoveAll(str => str[4] == 'U');
            Console.WriteLine(removeAll); //2
            foreach (var ccy in list)
                Console.WriteLine(ccy);
            Console.WriteLine();

            //ForEach リストの各要素に指定した処理を実行
            list.ForEach(str => Console.WriteLine(str));
            Console.WriteLine();

            //ConvertAll リスト内の要素を変換する
            var lowerList = list.ConvertAll(str => str.ToLower());
            lowerList.ForEach(str => Console.WriteLine(str));
        }
    }

実行結果
f:id:tos5511:20170312021500p:plain


参考書はこちらを使用しています。

実戦で役立つ Cプログラミングのイディオム/定石&パターン

C#再勉強


実戦で役立つ Cプログラミングのイディオム/定石&パターン


私が独学でC#の学習を始めた初期の頃、独習C 第3版と並んで内容が理解しやすかった
Cプログラミング入門の筆者が新しい本を出していたので買ってみた。


C#の勉強は途中から自分が作りたいものがある時、必要な技術だけを抜粋して調べる様になっていたので、基礎から再入門のつもりで本書を一通りこなしてみるつもりだ。


CSV取込とDictionaryクラスを使った面白い例題。
※私が今までDictionaryとか殆どつかってなかっただけ(笑)

using System;
using System.Collections.Generic;
using System.IO;

namespace ConsoleApp_SaleCSV {
    class Program {
        static void Main(string[] args) {
            SaleCounter sales = new SaleCounter(ReadSales("Sales.csv"));
            Dictionary<string, int> amountPerStore = sales.GetPerStoreSales();
            foreach(KeyValuePair<string,int> obj in amountPerStore){
                Console.WriteLine("{0},{1}", obj.Key, obj.Value);
            }

        }

        static List<Sale>ReadSales(string filePath) {
            List<Sale> sales = new List<Sale>();
            string[] lines = File.ReadAllLines(filePath);

            foreach(string line in lines) {
                string[] items = line.Split(',');
                Sale sa = new Sale {
                    ShopName = items[0],
                    productCategry = items[1],
                    Amount = int.Parse(items[2])
                };
                sales.Add(sa);
            }
            return sales;
        }
    }
}

namespace ConsoleApp_SaleCSV {
    class Sale {
        //店舗名
        public string ShopName { get; set; }

        //商品カテゴリ
        public string productCategry { get; set; }

        //売上高
        public int Amount { get; set; }
    }
}

using System.Collections.Generic;

namespace ConsoleApp_SaleCSV {
    class SaleCounter {
        private List<Sale> _sales;

        public SaleCounter(List<Sale> sales) {
            _sales = sales;
        }

        public Dictionary<string, int> GetPerStoreSales() {
            var dict = new Dictionary<string, int>();
            foreach(Sale sale in _sales) {
                if (dict.ContainsKey(sale.ShopName))
                    dict[sale.ShopName] += sale.Amount;
                else
                    dict[sale.ShopName] = sale.Amount;
            }
            return dict;
        }
    }
}

CSV中身
店舗A,商品A,1000
店舗A,商品B,1500
店舗B,商品C,3000
店舗B,商品A,1000
店舗A,商品A,1000
店舗C,商品B,1500
店舗C,商品B,1500
店舗C,商品B,1500
店舗A,商品C,3000


実行結果
f:id:tos5511:20170311181241p:plain

うん、SQL書いた方が楽だな(笑)

アクセスFXがサービス休止

変更:店頭サービス(アクセスFX、アクセスCFD、アクセスIndex)休止のお知らせ [17/02/28] | 日産証券

アクセスFXがサービス休止。使ってなかったけど。
手数料は無料だからおそらくマークアップ0.1pipsだとして
PBFeeとBrokerageFee払っておそらく1本あたりの収益は500円もないだろうと思う。
ボリュームは月間5万本以下として月いいとこ売上2,000万から3,000万と推察。
システムランニング費用考慮するとビジネスにならなかったか

全然知らんので検討違いかもしれないけど