* C♯ [#fc86d697]
//.NET Framework SDK クラス ライブラリ リファレンス
- [[C# プログラミング ガイド :http://msdn2.microsoft.com/ja-jp/library/67ef8sbd(VS.80).aspx]]
- [[System 名前空間:http://msdn2.microsoft.com/ja-jp/library/system.aspx]]

** [[組み込み型の一覧表 (C# リファレンス):http://msdn2.microsoft.com/ja-jp/library/ya5y69ds.aspx]] [#n112b401]
//- エイリアス先がわかる
- decimal
-- Scale factor 0 〜 28
-- decimal.MinValue = -2^96-1 (-79,228,162,514,264,337,593,543,950,335)
-- decimal.MaxValue = 2^96-1 (79,228,162,514,264,337,593,543,950,335) (約 8 * 10^28)
- int
-- int.MaxValue

* Tips [#y951c0fe]
- [[C# によるプログラミング入門:http://ufcpp.net/study/csharp/]]
- [[C++プログラマのためのC#入門:http://www.ne.jp/asahi/nami/mei/cpp2cs.html]]

** 個別 [#b5cc3ecb]
- 自動キャスト
-- char + char や short + short などはオペランドが int にキャストされてから計算され、結果が int になるので明示的キャストをしないと char や short に結果を代入できない
- enum
 enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
 enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri}; // 1 origin
 int x = (int)Days.Sun;
- yield
-- [[yieldキーワード:http://wisdom.sakura.ne.jp/programming/cs/cs2_8.html]]
- using
-- [[確実な終了処理を行うには?:http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html]] - usingステートメントの使い方
- 参照渡し
-- [[引数の参照渡し:http://ufcpp.net/study/csharp/sp_ref.html]]
- [[checked:http://msdn2.microsoft.com/ja-jp/library/74b4xzyw(VS.80).aspx]]
- インデクサ
-- インデクサ[]について知りたい場合は各クラスの.Itemをみる
//- functor

- GUI Tk
-- Microsoft XNA

** テンプレ [#o3a3cfc1]
 int[] daysOfMonth = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

** C# 3.0 [#yc4969a4]
- [[Google.jp:C# 3.0]]

* 正規表現 [#lf0b48fe]
- [[正規表現言語要素:http://msdn2.microsoft.com/ja-jp/library/az24scfc(VS.80).aspx]]

* クラス作り [#j8e6cc96]
- [[implicit:http://msdn2.microsoft.com/ja-jp/library/z5z9kes2(VS.80).aspx]] でキャストを定義。精度落ちなどがある場合はexplicitで暗黙の型変換を不可に

- IComparable<T>

- [[operator (C# リファレンス) :http://msdn2.microsoft.com/ja-jp/library/s53ehcz3(VS.80).aspx]]
- ==と!=は両方override
- <=と>=は両方override
- +=, -=, /=, *=はsyntax sugar

* デリゲート [#nad2b9f2]
- 要するにメソッドへの参照。型が定義されている
-- [[Predicate:http://msdn2.microsoft.com/ja-jp/library/bfcke1bz(VS.80).aspx]]
-- [[Action:http://msdn2.microsoft.com/ja-jp/library/018hxwa8(VS.80).aspx]]
-- [[Comparison:http://msdn2.microsoft.com/ja-jp/library/tfakywbh(VS.80).aspx]]

- [[方法 : デリゲートを宣言し、インスタンス化して使用する (C# プログラミング ガイド):http://msdn2.microsoft.com/ja-jp/library/ms173176(VS.80).aspx]]
- 匿名メソッドは[[delegate:http://msdn2.microsoft.com/ja-jp/library/900fyy8e(VS.80).aspx]]()で作成 (C#2.0から)
- [[第17回 処理を委譲するdelegate:http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_017/csharp_abc01.html]]

* ソート [#c9e8c049]
- Array.Sort(k, v)
-- 配列kの値に基づいてkとvをソート

- [[Array.Sort<T>(T[] array, Comparison<T> comparison):http://msdn2.microsoft.com/ja-jp/library/cxt053xf(VS.80).aspx]]

* ペア, タプル [#p53d8985]
 public class Pair<T1, T2>
   where T1 : System.IComparable<T1>
   where T2 : System.IComparable<T2> {
 	public T1 fst;
 	public T2 snd;
 	public Pair(T1 fst, T2 snd) {
 		this.fst = fst;
 		this.snd = snd;
 	}
 	public override bool Equals(object o) {
 		if(o == null || o.GetType() != this.GetType()) return false;
 		Pair<T1, T2> obj = (Pair<T1, T2>)o;
 		return (this.fst.Equals(obj.fst)) && (this.snd.Equals(obj.snd));
 	}
 	public override int GetHashCode() {
 		return fst.GetHashCode() ^ snd.GetHashCode();
 	}
 }

* 探索 [#c5550583]
** bitマスクでvisited [#fe8cb327]
- Lを忘れずに
 private string bit(long i) {
 	StringBuilder sb = new StringBuilder();
 	for(int pos = 31; 0 <= pos; pos--) {
 		sb.Append((i >> pos) & 1L);
 	}
 	return sb.ToString();
 }
 private long clearBit(long i, int pos) {
 	return i ^ (1L << pos);
 }
 private long getBit(long i, int pos) {
 	return (i >> pos) & 1L;
 }

* 入出力 [#db0d9d07]
- [[scanf みたいなことがしたい:http://ufcpp.net/study/csharp/dic/reversedic.html#c-06]]

** [[System.Console メンバ:http://msdn2.microsoft.com/ja-jp/library/system.console_members.aspx]] [#sf15c470]
- Console.Write
- Console.WriteLine
- string s = Console.ReadLine()
- Console.SetIn(new StreamReader(args[0])) てな感じでファイル読み込み

- Console.WriteLine("{0:d3}", a); で3桁になるまで0 padding

* データ構造 [#b191c71d]
** 文字列 [#kea70ea8]
- stringデータ型はStringクラスへのalias
- 比較
-- [[public int CompareTo(Object value):http://msdn2.microsoft.com/ja-jp/library/fkw3h78a(VS.80).aspx]]
-- [[String.CompareOrdinal:http://msdn2.microsoft.com/ja-jp/library/system.string.compareordinal(vs.80).aspx]] こちらがC言語などと同じ比較

- int i = int.Parse(s)
- long i = long.Parse(s)

- [[System.String メンバ:http://msdn2.microsoft.com/ja-jp/library/system.string_members.aspx]]
-- string upper = s.ToUpper()
-- string lower = s.ToLower()
-- char[] ca = s.ToCharArray()
-- new string(char[] ca)
-- new string(c, n)
-- .Substring(from), .Substring(from, length)
-- string[] sa = s.Split(new char[] {' '})
-- string[] sa = s.Split(' ')
-- string joined = string.Join(string[] sa)
-- string joined = string.Join(string separator, string[] s)
-- 不可 s[0] = 'a'
--- []つまりCharsプロパティにgetterしか定義されていない

- [[System.Text.StringBuilder:http://msdn2.microsoft.com/ja-jp/library/system.text.stringbuilder_members.aspx]]
-- sb.Append(Char, int32)
-- sb[0] = 'a' (stringでは出来ない)

- string s = string.Format("{0:d3} aaa", 10); でsprintf

- string s = Convert.ToString(value, 2); で2進数

** [[配列:http://msdn2.microsoft.com/ja-jp/library/9b9dty7d(VS.80).aspx]] [#ma3546cb]
- 配列は参照型
- 要素は、数値型の場合0、参照型の場合nullで初期化されることを保障
- 配列はSystem.Arrayから派生。すべてIEnumarable(IEnumeratorが取得できる)

- bool[,,] b = new bool[3, 3, 3];

- 配列(多次元配列も可)に対するforeach
 int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6 };
 foreach (int i in a) System.Console.WriteLine(i);
- [[方法 : foreach を使用してコレクション クラスにアクセスする (C# プログラミング ガイド):http://msdn2.microsoft.com/ja-jp/library/9yb8xew9(VS.80).aspx]]
-- foreachはIEnumerator.Currentでiterativeに値を取得して処理するが、Currentにsetterがないので書き換えは不可。foreach中にCollectionsを書き換えようとするとExceptionがとぶ

- 整列済みならArrayをつかってBinarySearchがきく
- 二次元配列のSearch
-- Slope Search
-- Search by elimination
-- bsでadd
 private void add(List<int> d, int e) {
 	if(d.BinarySearch(e) < 0) d.Add(e);
 }

- T[] a = Array.ConvertAll<string, T>(string[] sa, delegate(string s){ ...; return new T(...); })
-- Converter<TInput,TOutput> converter デリゲート

** [[System.Collections.Generic.List メンバ:http://msdn2.microsoft.com/ja-jp/library/d9hw1as6.aspx]] (動的配列) [#o610fa35]
- List<T> list = new List<T>(配列とかいれてもいい);
- list.Add(o), list.AddRange(ICollection)
- .GetRange(from, length)
-- 部分配列を参照するListを返す。要素のコピーはされない
- 含むか Contains(o)
- 述語にマッチする要素を含むか Exists(Predicate<T> match)
- 述語にマッチする要素 Find(Predicate<T> match)
- 要素のインデックス IndexOf(o)
- 述語にマッチする要素のインデックス FindIndex(Predicate<T> match)
- list.ForEach(Action<T> action)
- if(list.TrueForAll(Predicate<T> match)) { ... }
- list.Insert(o), list.InsertRange(ICollection)
- list.Remove(o), list.RemoveAt(i), list.RemoveRange(from, length)
- T[] a = l.ToArray()
- list.Reverse()
- list.Sort()
- list.Sort(Comparison<T> comparison) デリゲートを入れる

- Hoge のサブクラス HogeExt のリスト List<HogeExt> を List<Hoge> と同様に受け取れるメソッドを書くには
 int fuga<T>(List<T> lst) where T : Hoge {
   ...
 }
-- Java の List<? extends Hoge>

** [[System.Collections.Generic.Dictionary メンバ:http://msdn2.microsoft.com/ja-jp/library/3eayzh46.aspx]] (ハッシュによる連想配列) [#ed99b51d]
- Dictionary<TK, TV> d = new Dictionary<TK, TV>()

- foreach (KeyValuePairを使う方法)
 foreach( KeyValuePair<string, string> kvp in openWith ) {
   Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
 }
- foreach (Keyだけとる方法)
 foreach (string key in ht.Keys) {
   Console.WriteLine("{0} : {1}", key, ht[key]);
 }
-- keyには代入できない
-- d.Valuesでも

- = d.Count
- if(d.ContainsKey(o)) { ... }
- if(d.ContainsValue(o)) { ... }
- d.Add(k, v), d.Remove(key)

//** [[System.Collections.Generic.LinkedList メンバ:http://msdn2.microsoft.com/ja-jp/library/h64606bk(VS.80).aspx]] (連結リスト) [#s35cd438]
//- LinkedList<T> l = new LinkedList<T>()

** Tree set [#v83029f3]
- SortedListで作るしかないか
- SortedList<int> l = new SortedList<int>();
- l.KeysでIListが取れる
//- Iteratorのとり方

** [[System.Collections.Generic.SortedList メンバ:http://msdn2.microsoft.com/ja-jp/library/ms132320(VS.80).aspx]] (Tree map) [#k07e338a]

** [[System.Collections.Generic.SortedDictionary メンバ:http://msdn2.microsoft.com/ja-jp/library/ecc800k7(VS.80).aspx]] (Tree map) [#m12a740d]

//** [[System.Collections.ArrayList メンバ:http://msdn2.microsoft.com/ja-jp/library/system.collections.arraylist_members.aspx]] (動的配列)

//** [[System.Collections.Hashtable メンバ:http://msdn2.microsoft.com/ja-jp/library/system.collections.hashtable_members.aspx]] (ハッシュによる連想配列)

* 値 [#a77172d2]
** [[System.Math メンバ:http://msdn2.microsoft.com/ja-jp/library/system.math_members.aspx]] [#t01c7b57]
- double a = Math.Pow(num)
- Math.Abs(num)
- Math.Max(num), Math.Min(num)
- Math.Floor(num), Math.Ceiling(num), Math.Round(num)
//-- decimalに対しても定義されている
- double a = Math.Sqrt(num)
- double a = Math.Log10(num)

- Math.PI
- Math.E

- [[[C#][VB]数学関数 (Math) に関する Tips::http://jeanne.wankuma.com/tips/math/]]
- http://school.topposystem.co.jp/CS/Index.asp

** 有理数 [#da3871a2]

* 環境 [#kef438b3]
- [[Visual C# Express Edition:http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/]] csc (.NET Frameworkのディレクトリにある)
-- MSDN Libraryも入れる
- [[Mono CSharp Compiler:http://www.mono-project.com/CSharp_Compiler]] gmcs
-- .NET Frameworkを多数のプラットフォームで使用可能にするMono Projectの一部
//- [[双葉:http://www.futaba-ide.net/]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS