2017-11-26 14 views
0

Rebol에서 임의의 구조화 된 데이터를 나타내는 블록을 사용할 것으로 예상됩니다. 블록을리스트가 아닌 데이터 구조로 취급하는 내장형 또는 표준 방식이 있습니까? 내가 생각하고블록을 Rebol의 다양한 데이터 구조로 사용

:

  • 스택
  • 큐 (아마도 더블 엔디드)
  • 세트는
  • 일명 매핑합니다. 연관 배열

답변

2

Rebol에는 모든 데이터를 동일한 방식으로 처리 할 수있는 임의의 데이터 보유자가 있습니다.

  • 블록! 빠른 인덱스 (정수) 참조를 위해 배열로 구현
  • list! 데이터를 빠르게 삽입하고 제거하기 위해 연결된 목록으로 구현 됨
  • 해시! 두 데이터의 빠른 검색을 위해 해시 참조 목록으로 구현

당신은

insert append index? find poke select ... 

과 같은 방법으로 그들에 운영 키하지만 그들은 결과에서 특히 응답 시간이 조금 다릅니다. 귀하의 경우에는

  • 블록을 사용! 스택 용
  • list! 대기열에 대한 (내 생각)
  • 해시! 연관 배열의 경우

위에서 언급 한 모든 기능은 비슷하게 작동합니다 (해시도 인덱스로 참조 할 수 있음). 따라서 이들 중 하나를 연관 배열로 처리 할 수 ​​있습니다.

>> x: [a one b two c 33] 
== [a one b two c 33] 
>> x/a 
== one 
>> x/c 
== 33 
>> select x 'b 
== two 
>> pick x 4 
== two 

이는 해시와 완전히 동일합니다. x: hash! [a 1 b 2 33]으로 정의됩니다. 따라서 새로운 키 값 쌍을 추가하려면 다음을 수행하십시오.

>> x: make hash! [ a 1 b 2 c 33] 
== make hash! [a 1 b 2 c 33] 
>> append x [ key value ] 
== make hash! [a 1 b 2 c 33 key value] 
>> x/key 
== value 
>> select x 'key 
== value 
>> pick x 8 
== value 

리콜에는 키 값 쌍인 해시가 없습니다. 내부적으로 해쉬를 생성하는 정렬 된 값 목록 일뿐입니다! 참조 값. 그러므로 당신은 단지뿐만 아니라 정제 당신은 또한 객체를 사용할 수있는 연관 배열에 대한

>> select/skip x 33 2 
== none 

건너 뛰기, 정말 키 값 쌍을 위해 그것을 사용하려면

>> select x 33 
== key 

위의 값 (33)을 다음과 무엇을 물어 사용할 수 있습니다! 동적 인 필드를 가질 필요가없는 경우에 대비해.

+0

연관 구조의 경우 특정 키에 값을 삽입하는 기능은 무엇입니까? – dukereg

+1

@dukereg 내 업데이트보기 – joing

+0

스택의 내장 함수를 사용하여 블록의 같은 끝에서 삽입 및 삭제하는 방법은 분명하지 않습니다. – dukereg