diff --git a/SeqExt.Tests/Mutable/VarArrayTest.cs b/SeqExt.Tests/Mutable/VarArrayTest.cs index 35a53fa..2144c5b 100644 --- a/SeqExt.Tests/Mutable/VarArrayTest.cs +++ b/SeqExt.Tests/Mutable/VarArrayTest.cs @@ -12,6 +12,8 @@ public class VarArrayTest public void 空のVarArrayが作れる() { Assert.That(new VarArray(), Is.Empty); + Assert.That(VarArray.Empty(), Is.Empty); + Assert.That(VarArray.Create(), Is.Empty); } [TestCase(new int[0], new int[0])] diff --git a/SeqExt/Mutable/VarArray.cs b/SeqExt/Mutable/VarArray.cs index 3499b37..6384f42 100644 --- a/SeqExt/Mutable/VarArray.cs +++ b/SeqExt/Mutable/VarArray.cs @@ -1,8 +1,100 @@ using System; +using System.ComponentModel; using LangExt; namespace SeqExt.Mutable { + public static class VarArray + { + /// 空の可変長配列を作ります。 + public static VarArray Empty() { return new VarArray(); } + + /// 空の可変長配列を作ります。これの代わりに、Emptyを使った方がいいでしょう。 + public static VarArray Create() { return new VarArray(); } + /// 要素が1つ含まれた可変長配列を作ります。これの代わりに、Singletonを使うことを考慮しましょう。 + public static VarArray Create(T x1) { return new VarArray { x1 }; } + /// 要素が2つ含まれた可変長配列を作ります。 + public static VarArray Create(T x1, T x2) { return new VarArray { x1, x2 }; } + /// 要素が3つ含まれた可変長配列を作ります。 + public static VarArray Create(T x1, T x2, T x3) { return new VarArray { x1, x2, x3 }; } + /// 要素が4つ含まれた可変長配列を作ります。 + public static VarArray Create(T x1, T x2, T x3, T x4) { return new VarArray { x1, x2, x3, x4 }; } + + /// + /// 引数に指定された要素が含まれた可変長配列を作ります。 + /// + public static VarArray Create(params T[] values) + { + return new VarArray(values.ToSeq()); + } + + /// + /// fを元にn要素の可変長配列を生成します。 + /// + public static VarArray Init(int n, Func f) + { + if (n < 0) throw new ArgumentOutOfRangeException(); + var res = new VarArray(); + for (int i = 0; i < n; i++) + res.Add(f(i)); + return res; + } + + /// + /// 指定した要素を含むn要素の可変長配列を生成します。 + /// + public static VarArray Repeat(int n, T t) + { + if (n < 0) throw new ArgumentOutOfRangeException(); + var res = new VarArray(); + for (int i = 0; i < n; i++) + res.Add(t); + return res; + } + + /// + /// 指定した要素のみを含む1要素の可変長配列を生成します。 + /// + public static VarArray Singleton(T t) + { + return new VarArray { t }; + } + + /// + /// 配列を可変長配列に変換します。 + /// + public static VarArray OfArray(T[] array) + { + return Create(array); + } + + /// + /// シーケンスを可変長配列に変換します。 + /// 無限のシーケンスは扱えません。 + /// + public static VarArray OfSeq(Seq seq) + { + return new VarArray(seq); + } + + /// + /// シーケンスを可変長配列に変換します。 + /// 無限のシーケンスは扱えません。 + /// + public static VarArray ToVarArray(this Seq self) + { + return new VarArray(self); + } + + /// 使用しません。 + [EditorBrowsable(EditorBrowsableState.Never)] + public static new bool Equals(object a, object b) { return object.Equals(a, b); } + + /// 使用しません。 + [EditorBrowsable(EditorBrowsableState.Never)] + public static new bool ReferenceEquals(object a, object b) { return object.ReferenceEquals(a, b); } + } + /// /// 可変長配列です。 ///