From 18b4423dd23ed10c1bb2441e9c4f421b80523ff4 Mon Sep 17 00:00:00 2001 From: bleis-tift Date: Tue, 8 Oct 2013 15:13:28 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=86=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=20refs=20#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SeqExt/Mutable/VarArray.cs | 61 ++++++++++++++++++++++++++++++++++++++ SeqExt/RandomAccessSeq.cs | 8 +++++ 2 files changed, 69 insertions(+) diff --git a/SeqExt/Mutable/VarArray.cs b/SeqExt/Mutable/VarArray.cs index 0a3e079..3499b37 100644 --- a/SeqExt/Mutable/VarArray.cs +++ b/SeqExt/Mutable/VarArray.cs @@ -3,42 +3,83 @@ namespace SeqExt.Mutable { + /// + /// 可変長配列です。 + /// public sealed class VarArray : SeqBase, RandomAccessSeq { readonly System.Collections.Generic.List value; + /// + /// 空の可変長配列を生成します。 + /// public VarArray() { this.value = new System.Collections.Generic.List(); } + /// + /// シーケンスの要素を含む可変長配列を生成します。 + /// public VarArray(Seq seq) { this.value = new System.Collections.Generic.List(seq); } + /// + /// 可変長配列のサイズを取得します。 + /// public int Size { get { return this.value.Count; } } + /// + /// 要素を末尾に追加します。この操作は最悪O(N)かかる場合があります。 + /// public void Add(T item) { this.value.Add(item); } + /// + /// シーケンスに含まれるすべての要素を末尾に追加します。この操作は最悪O(N)かかる場合があります。 + /// public void AddAll(Seq seq) { this.value.AddRange(seq); } + /// + /// 要素を指定位置に追加します。この操作にはO(N)かかります。 + /// public void Insert(int index, T item) { this.value.Insert(index, item); } + /// + /// シーケンスに含まれるすべての要素を指定位置に追加します。この操作にはO(N)かかります。 + /// public void InsertAll(int index, Seq seq) { this.value.InsertRange(index, seq); } + /// + /// 指定された項目を先頭から検索し、一つ削除します。指定した項目が見つからなかった場合、このメソッドはfalseを返します。この操作にはO(N)かかります。 + /// public bool RemoveFirst(T item) { return this.value.Remove(item); } + /// + /// 指定された条件に一致する要素をすべて削除します。この操作にはO(N)かかります。 + /// + /// この関数がtrueを返す要素を削除します。 + /// 削除された要素数 public int RemoveAll(Func pred) { return this.value.RemoveAll(x => pred(x)); } + /// + /// 指定されたインデックスの要素を削除します。この操作にはO(N)かかります。 + /// public void RemoveAt(int index) { this.value.RemoveAt(index); } + /// + /// 指定された範囲の要素を削除します。この操作にはO(N)かかります。 + /// public void RemoveRange(Range range) { if (range.Length != 0) this.value.RemoveRange(range.Increasing ? range.Begin : range.Last, range.Length); } + /// + /// 全ての要素を削除します。 + /// public void Clear() { this.value.Clear(); } protected override IEnumerator GetEnumeratorImpl() @@ -46,12 +87,18 @@ protected override IEnumerator GetEnumeratorImpl() return new Enumerator(this.value.GetEnumerator()); } + /// + /// 指定されたインデックスの要素を取得・設定します。 + /// public T this[int index] { get { return this.value[index]; } set { this.value[index] = value; } } + /// + /// 指定されたインデックスの要素の取得を試みます。 + /// public Option TryGet(int index) { if (index < this.value.Count && index >= 0) @@ -59,18 +106,32 @@ public Option TryGet(int index) return Option.None; } + /// + /// このオブジェクトを既定の並び順でソートします。 + /// 非破壊的にソートしたい場合、LangExt.SeqモジュールのSort拡張メソッドを使います。 + /// public void SortThis() { this.value.Sort(); } + /// + /// このオブジェクトを指定された並び順でソートします。 + /// public void SortThisWith(System.Collections.Generic.IComparer comparer) { this.value.Sort(comparer); } + /// + /// このオブジェクトを指定された並び順でソートします。 + /// public void SortThisWith(Func comparison) { this.value.Sort((a, b) => comparison(a, b)); } + /// + /// このオブジェクトを反転します。 + /// 非破壊的に反転したい場合、LangExt.SeqモジュールのReverse拡張メソッドを使います。 + /// public void ReverseThis() { this.value.Reverse(); diff --git a/SeqExt/RandomAccessSeq.cs b/SeqExt/RandomAccessSeq.cs index 7ff286d..e8abaaa 100644 --- a/SeqExt/RandomAccessSeq.cs +++ b/SeqExt/RandomAccessSeq.cs @@ -3,8 +3,16 @@ namespace SeqExt { + /// + /// ランダムアクセス可能なシーケンスを表すインターフェイスです。 + /// public interface RandomAccessSeq : Seq { + /// + /// 指定されたインデックスの要素を取得します。 + /// + /// 取得するインデックス + /// 指定されたインデックスに対応する要素 T this[int index] { get; } } }