문제

내가 찾는 것은 효율적인 색인 지속적 데이터 구조입니다.나는 일반적으로 작동합니다.NET 고 있 FSharp 의지도는 그러나 그 구현 및 대부분의 다른 사람을 나는 알만 제공하는 단일 인덱스',왼쪽을 매핑을 사용합니다.

기본적으로 여기는 시나리오

public class MyObject
    public int Id { get; }
    public int GroupId { get; }
    public string Name { get; }

는 Id 체의 것이 전 세계적으로 독특한 설정 항목이 추가됩니다.GroupId 있는 값이 중복되고 싶어를 쿼리할 수 있에 대한 모든 값과 일치하는 GroupId 에는 GroupId 이름이 될 것입니다 하지만 독특한 중복될 수 있습 따른 GroupId 습니다.이지 않는 상황이 나를 만드는 단순한 복합 열쇠의 3 분야로 나가 필요로 독립적이스 그룹의 항목 기반으로 특정 필드 값입니다.

내가 이것을 할 수 있고,과거에 사용하여,사전의 사전되고 있는 추천에 다른 게시물이 여기에서 유래...그러나 나는 또한 데이터 구조를 1)지속적이고 모든 것을 즉 2)효율적인 메모리에서 의미하는 버전이 필요할 수 있는 많은 노드를 가능 3)능률적인에 modifcations-단하고 빠르

나는 나는 아주 조금 여기에 있지만 제가 물어보고 싶은 피하도 노력하고 다시 발명의 바퀴가있는 경우 이미 완료되었습니다.

감사

도움이 되었습니까?

해결책

나는 확실하지 않은 왜 다른 곳에서,그리고에서 기존의 질문에 답하면,사람들이 추천하여 기판을 처리 기존 구조물입니다.Imbricating 구조(지도의지도는,지도의 목록,사전의 사전,...)만 작품에 대한 두 개의 인덱스의 경우 더 느슨 다른 것보다(두 값이 같은지수 1 의미 이 두 값이 동일 인덱스를 위해 2),이는 불필요한 제약 조건이 있습니다.

내가 사용하는 것이 기록의지도는,그들 중 많은 사람 당신이 원하는대로 다른 색인,그리고 나 유지하는 것이라는 고정된 모든 값에 존재하는 지도에 존재하는 모든 다른 사람에서 동일한 기록합니다.값을 추가하려면 분명히 그것을 추가해 모든지도에서 기록이다.마찬가지로 제거됩니다.고정 만들 수 있습니다 불가능한 범을 통해 외부에서 캡슐화합니다.

는 경우에 당신을 걱정하는 값이 저장된 데이터의 구조는 것이 중복되지 않습니다.각 지도만을 포함하는 포인터이다.그들은 모두 동일한 표현의 값으로 설정합니다.공유만큼 좋은 것입니다 그것은 이미 가진 간단한 단일 인덱싱 지도입니다.

다른 팁

로 사용할 수있는 사전의 사전 기대는 예:F#도 지도 있을 수 있습니다 당신이 원하는,예를 들어,

Map<int, Map<string, MyObject> >  // int is groupid, string is name

어쩌면?나는 불분명한 경우에 당신은 또한에 대한 빠른 액세스를 필요에 의해 정수 id 입니다.

수도 있습 확인 Clojure 의 라이브러리나는에 대해 많이 알지 못 Clojure,하지만 범위의 지속적인 효율적인 데이터 구조를 중 하나가 될 것으로 보인 Clojure 의 장점이 있습니다.

그것은 보이려고 하는 적용 OOP 원칙을 FP 응용 프로그램.

당신이 생각하는 경우에 용어의 기능,그것은 무엇을 하려고 하니까?

를 사용하면 목록은,예를 들어,당신은 단지 그것을 말할을 끌어 모든 물체를 특정 그룹 값입니다.

필요한 경우 빠르게 액세스 그룹에 의해할 수 있도록할 수 있도록 끌어 모든 물체에 그룹입니다.

거기에 다양한 데이터 구조와 많은 기능을 하는 작업이 각지만,당신이 먼저 생각하는 당신의 문제에 대해서는,기능적지 않는 객체-지향,POV.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top