2017-01-26 1 views
6

순전히 기능적인 사전을 제공하는 C#에서 사용하기에 적합한 클래스가 표준 라이브러리에 없으면, 아마도 Nuget 패키지로 존재합니까? 즉, 키를 추가하거나 제거하면 원본을 변경하지 않고 새 사전을 반환합니다.C# 순전히 기능적인 사전

+6

Eh,'ImmutableDictionary '? https://msdn.microsoft.com/en-us/library/dn467181(v=vs.111).aspx 불변 사전을 조작하면 원래 사전 복사본이 만들어지고 조작이 적용되고 새로운 불변 ​​사전이 반환됩니다 . –

+3

당신은 '기능적'이란 단어를 잘못 사용하고 있습니다. 읽기 전용 또는 변경 불가능한 사전에 대해 묻습니다. 두 가지 동작을 모두 제공하는 클래스가 있습니다. –

답변

8

, ImmutableDictionary<TKey, TValue>을 더 찾을 수 있습니다

https://msdn.microsoft.com/en-us/library/dn467181(v=vs.111).aspx

당신은 불변 사전에 원래 사전의 사본를 조작 할 때 이 적용되고 조작이 적용되고 new 불변 사전이 리턴됩니다.

+2

누군가가 [ReadOnlyDictionary] (https://msdn.microsoft.com/en-us/library/gg712875(v=vs/vs/) 110) .aspx) 및 [ 'ImmutableDictionary'] (https://msdn.microsoft.com/en-us/library/dn467063(v=1111).aspx)와 같은 불변의 컬렉션 : 전자는 컬렉션을 수정하는 메소드를 제공하지만 원래의 수정 가능한 컬렉션을 감싸는 래퍼 일뿐입니다. 또한 변경된 경우 읽기 전용 컬렉션도 수정됩니다. 불변의 콜렉션은 래퍼가 아니기 때문에 변경할 수 없습니다. –

+2

...하지만 비슷하게 작동하는 ['Add'] (https://msdn.microsoft.com/en-us/library/dn466983 (v = vs.111) .aspx)처럼 "수정"하는 방법을 제공합니다 'string' 메쏘드에, 그들은 새로운 수정 된 불변 콜렉션을 리턴하지만, 오래된 것은 변경되지 않은 채로 남아 있습니다. –

3

".NET에는 읽기 전용 또는 변경 불가능한 사전이 있습니까?"라는 문구를 다시 말해야합니다. 대답은 모두에게 그렇습니다.

읽기 전용 사전 기능은 ReadOnlyDictionary 클래스에서 제공합니다.

불변성은 다른 것을 의미합니다. 즉, 다른 클라이언트가 컬렉션을 변경하는 경우에도 한 클라이언트의 컬렉션보기가 변경되지 않는다는 의미입니다. 이것은 ImmutableDictionary 클래스에서 제공되는

1

가장 좋은 기능 사전 (또는이 기능을 세계에 알려져있는 한 '지도')로 볼 수 있습니다이 C#을 기능 라이브러리의 일부로 : 여기

https://github.com/louthy/language-ext

https://github.com/louthy/language-ext/blob/master/LanguageExt.Core/Map.cs

면책 조항 :지도 모듈은 내가 썼다. 그러나 라이브러리를 사용하는 이유는 C#에서 함수형 프로그래밍을 용이하게하기 위해서입니다. InutableDictionary의 대답이 받아 들여지는 것은, (불변의 시멘틱스를 사용하고 있어도)보다 OO 스타일의 인터페이스입니다.

관련 문제