O(1) スタック操作と O(log n) リスト操作を提供する不変コレクションを実装しています。その結果、前面に要素を追加する方が、背面に要素を追加するよりも高速です。System.Collections.Immutable.IImmutableList<T>.Add()
( https://nuget.org/packages/Microsoft.Bcl.Immutable、http://blogs.msdn.com/b/bclteam/archive/2012/12/18/preview-of-immutable-の有効な実装はできますか? collections-released-on-nuget.aspx ) コレクションの後ろではなく前に要素を追加しますか?
インターフェイスの定義方法は次のとおりです。
[SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification = "Ignored")]
public interface IImmutableList<T> : IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable
{
IEqualityComparer<T> ValueComparer { get; }
// Summary:
// Adds the specified value to this list.
//
// Parameters:
// value:
// The value to add.
//
// Returns:
// A new list with the element added, or this list if the element is already
// in this list.
IImmutableList<T> Add(T value);
//
// Summary:
// Adds the specified values to this list.
//
// Parameters:
// items:
// The values to add.
//
// Returns:
// A new list with the elements added, or this list if the elements are already
// in this list.
IImmutableList<T> AddRange(IEnumerable<T> items);
IImmutableList<T> Clear();
bool Contains(T value);
int IndexOf(T value);
IImmutableList<T> Insert(int index, T element);
IImmutableList<T> InsertRange(int index, IEnumerable<T> items);
IImmutableList<T> Remove(T value);
IImmutableList<T> RemoveAll(Predicate<T> match);
IImmutableList<T> RemoveAt(int index);
IImmutableList<T> RemoveRange(IEnumerable<T> items);
IImmutableList<T> RemoveRange(int index, int count);
IImmutableList<T> Replace(T oldValue, T newValue);
IImmutableList<T> SetItem(int index, T value);
IImmutableList<T> WithComparer(IEqualityComparer<T> equalityComparer);
}