Есть ли библиотека .net с постоянным неизменным классом Vector (как в Clojure / Scala)? - PullRequest
5 голосов
/ 15 декабря 2011

Я потратил хороший час на поиски в Интернете и могу найти различные неизменяемые списки .NET, наборы и карты. Я не смог найти постоянный неизменный Вектор.

Нечто похожее на неизменный Вектор Скалы - это то, к чему я стремлюсь (и я считаю, что в Clojure это похоже) Он должен вызываться из библиотеки C #.

Существует ли такая вещь в Microsoft-land?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Вы можете проверить Реализация ClojureCLR .Это реализация языка Clojure поверх механизма исполнения CLR / DLR.Я полагаю, что вы не можете просто скопировать и вставить код в свой проект, но без особых усилий вы сможете извлечь конкретные постоянные структуры данных.Загляните внутрь Clojure \ Clojure \ Lib для реализации, такой как PersistentVector.cs

Ido.

1 голос
/ 31 мая 2015

Существует реализация .NET ( вызываемая из библиотеки C #) постоянных векторов в пакете FSharpX.Collections , также доступна на NuGet.

Вот пример использования с главной страницы проекта:

// Create an empty PersistentVector and add some elements
PersistentVector<string> vector =
    PersistentVector<string>.Empty()
        .Conj("hello")
        .Conj("world")
        .Conj("!");

PersistentVector<string> vector2 = vector.Conj("!!!").Update(0,"hi");

Console.WriteLine(vector2[0]); // hi
Console.WriteLine(vector[0]);  // hello
Console.WriteLine(vector2[3]); // !!!

Console.WriteLine(vector.Length);  // 3
Console.WriteLine(vector2.Length); // 4

// remove the last element from a PersistentVector
PersistentVector<string> vector3 = vector2.Initial;

Console.WriteLine(vector3.Length); // 3
...