golang 에서 제공 하 는 List
container/list
에 있 습 니 다.이 가방 에는 주로 두 개의 데이터 구조 로 구성 되 어 있 는데 그것 이 바로 'Element', 'List' 이다.그 중에서 "Element" 는 CPP 의 "iterator" 에 해당 하 며, Prev 와 Next 방법 으로 이전 또는 다음 교체 기 를 얻 을 수 있 으 며, 교체 기의 간접 인용 은 구성원 Value 를 직접 사용 합 니 다.1 리스트 상 대 를 만들어 서 느껴 보 세 요.
l := list.New()
l.PushBack("one")
l.PushBack(2)
fmt.Println(l)
위의 코드 는 다음 과 같은 출력 을 얻 을 수 있 습 니 다.
&{{0x2081a21b0 0x2081a21e0 <nil> ?reflect.Value?} 2}
여기 서 구체 적 인 0x 데 이 터 는 변 경 될 수 있 습 니 다. 실제 기록 한 것 은 대상 의 주소 이지 만 마지막 '2' 는 변 하지 않 습 니 다. 이 는 현재 list 대상 에 두 가지 요소 가 있 음 을 나타 냅 니 다.
여 기 는 저희 가 사용 을 통 해서...
list.New()
list 대상 을 만 들 고 이 대상 의 PushBack()
방법 으로 list 대상 에 요 소 를 삽입 합 니 다.여기 서 우 리 는 신기 한 현상 을 발견 했다. CPP 에서 list 의 구성원 은 반드시 같은 유형 이 어야 하지만 우리 의 Golang 은 list 에 임의의 유형의 구성원 을 삽입 할 수 있다.이것 은 우리 로 하여 금 python 의 특성 을 쉽게 생각 하 게 한다.여기 서 우 리 는 소스 코드 를 통 해 Element 에 저 장 된 것 이 하나 라 는 것 을 알 수 있다. interface{}
구성원, 임의의 구성원 의 특성 을 지원 합 니 다:type Element struct {
// The value stored with this element.
Value interface{}
// contains filtered or unexported fields
}
2. 옮 겨 다 니 기 list
위의 예 는 fmt. Println 으로 list 의 간단 한 정 보 를 보 았 을 뿐 입 니 다. 전체 list 를 옮 겨 다 니 려 면 어떻게 해 야 합 니까?코드 보기:
l := list.New()
l.PushBack("one")
l.PushBack(2)
l.PushBack("three")
for iter := l.Front();iter != nil ;iter = iter.Next() {
fmt.Println("item:",iter.Value)
}
코드 를 실행 하면 결 과 를 볼 수 있 습 니 다.
item: one
item: 2
item: three
여기 서, 우 리 는 교체 기 변수 iter 를 정 의 했 습 니 다. Element 형식 으로 list 를 호출 합 니 다.
Front()
함수, list 의 첫 번 째 대상 을 얻 을 수 있 습 니 다. list 가 비어 있 으 면 nil 을 얻 을 수 있 습 니 다.같은 호출 목록 Back()
을 통 해 마지막 대상 의 교체 기 를 얻 을 수 있 습 니 다.for 구문 에서 우 리 는 list Next()
방법 으로 현재 교체 기의 다음 요소 의 교체 기 를 얻 었 습 니 다. 요소 가 없 으 면 nil 로 돌아 갑 니 다.그래서 iter !=nil
순환 종료 조건 으로 한다.위 에서 말 했 잖 아.교체 기 Value
의 구성원 을 인용 하여 메모리 저장 요소 에 대한 간접 응용 을 실현 할 수 있다.위의 함 수 를 통 해 하나의 요 소 를 얻 을 수 있 는 것 을 제외 하고 우 리 는 list 의
Len()
함 수 를 통 해 그 안의 요소 의 개 수 를 얻 을 수 있다.옥 에 티 는 Golang 의 List 가 python 에서 색인 을 통 해 요 소 를 인용 해 야 하 는 기능 을 제공 하지 않 았 거나 index
또는 at
유사 한 인터페이스 도 제공 하지 않 았 다 는 것 이다.3. 리스트 수정 멤버
위의 예 에서 우 리 는 list 에 요 소 를 추가 하 는 방법 을 보 여 주 었 다.
PushBack()
새로운 요 소 를 list 의 끝 에 추가 합 니 다.그 밖 에 PushFront()
요 소 를 list 의 첫 부분 에 삽입 할 수 있 습 니 다.InsertAfter()
요 소 를 list 에서 지정 한 요소 뒤에 삽입 할 수 있 습 니 다. InsertBefor
요 소 를 list 에서 지정 한 요소 앞 에 삽입 할 수 있 습 니 다.삽입 후 요 소 를 어떻게 삭제 합 니까?list
Remove()
함 수 를 통 해 지정 한 요 소 를 삭제 할 수 있 습 니 다.Insert 에 대응 하 는 MoveAfter()
, MoveBefore()
은 list 에서 요소 의 뒤 나 앞 요 소 를 지정 할 수 있 습 니 다.우 리 는 실례 를 하나 보 자.이 몇 개의 인터페이스 로 Queue 의 인 스 턴 스 를 조합 합 니 다.
type Queue struct {
data *list.List
}
func NewQueue() *Queue {
q := new(Queue)
q.data = list.New()
return q
}
func (q *Queue)Enqueue(v interface{}) {
q.data.PushBack(v)
}
func (q *Queue)Dequeue() interface{} {
iter := q.data.Front()
v := iter.Value
q.data.Remove(iter)
return v
}
func (q *Queue) Dump(){
for iter:=q.data.Front();iter!=nil;iter=iter.Next() {
fmt.Println("item:",iter.Value)
}
}
func main(){
q := NewQueue()
q.Enqueue("one")
q.Enqueue("two")
q.Dump()
v := q.Dequeue()
fmt.Println("v:",v)
q.Dump()
}
우 리 는 결 과 를 볼 수 있다.
item: one
item: two
v: one
item: two
마지막.우리 가 list 를 비우 고 싶다 면.호출 가능
Init()
인터페이스
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[SwiftUI]List화한 CoreData를 가로 스와이프로 행 삭제하는 방법상당히 조사했지만 일본어 자료가 없었기 때문에 비망록으로 남겨 둔다. 아래와 같이 CoreData를 참조한 리스트를 가로 스와이프로 삭제하고 싶었다. UI 요소뿐만 아니라 원본 데이터 당 삭제합니다. 잘 다른 페이지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.