두 계층 구조를 동기화하는 알고리즘을 작성하고 싶습니다. 이러한 구조는 객체 그래프, 관계형 데이터베이스 테이블에 저장된 데이터 등이 될 수 있습니다 (유사한 키가있는 한 두 개의 다른 구조조차도). 동기화는 단방향 일 수 있습니다. 즉, 하나의 구조가 프로토 타입이되고 다른 구조가 일치하도록 수정됩니다.두 계층 구조의 단방향 동기화
sync
기능이 있다고 가정 해 보겠습니다. 프로토 타입
objB
- - keyA
objA
keyB
위한 키 생성 기능 - 키 생성 기능
objA
에는 다음과 같은 동의해야합니다objB
addB
- 함수는objB
(새 ID는objB
)을 생성합니다.setB
는 - 기능 업데이트objB
remB
- 삭제하는 기능objB
parB
-이
그래서 우리는이 상황에 대한 addB
에 전달 - objB
의 부모의 ID 이 :
let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k)
(addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit)
(parB:'p) = ...
여기 내가 문제가있는 곳이 있습니다. 'a
및 'b
은 계층 구조이므로 함수는 'a
및 'b
의 속성을 알고 있어야합니다 (일단 키를 비교하고 여기까지 일치하고 더 통과해야 함). 이러한 "자식"속성의 경우에는 동기화에 전달 된 모든 동일한 인수가 필요하지만 각각의 인수는 필요합니다.
이것이 데이터 구조 문제라는 것이 명백 해지자. 루트 객체가 sync
으로 전달 될 수 있고 그래프를 아래쪽으로 탐색 할 수 있도록이 정보를 함께 연결하려면 어떻게해야합니까? 필자의 초기 생각은 모든 인수를 하나의 클래스에 통합하는 것이 었습니다.이 클래스에는 자식 속성 (동일한 유형의 ResizeArray
)이 있습니다. 그러나 다양한 유형의 다양한 속성을 사용하여 유형을 창 밖으로 던지거나 형식 인수의 대부분 또는 전체를 만드는 것보다는 작게 만들 수있는 방법을 찾지 못했습니다. obj
.
- 는
- 어떤 데이터 구조가 난을 캡슐화하는 데 사용할 수 있습니다 (I 아무것도 찾을 수가 없었다) 이미이 작업을 수행하는 잘 확립 된 방법이있다 :
그래서 여기 내 질문 있습니다 이 작업을 수행하는 데 필요한 데이터가 있습니까?
나는 이것을 철저히 설명하기 위해 최선을 다했지만, 명확하지 않은 것이 남아 있다면, 더 나은 정보를 제공하려고 노력할 것입니다.
이 알고리즘이 작동하는 중간 데이터 구조가 필요하며 다양한 유형의 데이터에도 해당 데이터를 중간 데이터 구조로 변환하고 알 고를 실행 한 다음 원래 데이터로 다시 변환해야합니다. 양식 – Ankur