2016-10-26 2 views
0

저는 Go를 사용하여 각 키에 대해 여러 개의 값을 저장하는 방법을 찾고 있습니다 (사전을 사용하여 파이썬에서 할 수있는 것처럼). Go에서이 작업을 수행 할 수있는 방법이 있습니까?파이썬의 사전에 해당합니다.

+0

저장하려는 값 유형은 무엇입니까? – sberry

+0

키 유형 : 정수이고 값은 ''map [name : 1954] ''와 같은 배열입니다. – Parag

답변

1

을 바탕으로 내가 좋아하는 뭔가를 제안 참조하십시오

mapB["foo"] = append(mapB["foo"], "fizzbuzz")

제 (구조체를 사용하여 다음과 같은 생각 만하는 경우 당신이 일을 추가 할 경우, 당신은 단지 map[int][]string{}

type Thing struct { 
    name string 
    age int 
} 

myMap := map[int][]Thing{} 

를 사용할 수 있습니다 당신의 조각의 각 항목에 대해 name 같은 단일 값에 관심 당신은 그냥 ...

myMap[100] = append(myMap[100], Thing{"sberry": 37}) 

을 또는 당신은 장소에 만들려면 :

: 데모 등의 의견에 따라 "nameIn"기능을 추가 :

myMap := map[int][]Thing{ 
     100: []Thing{Thing{"sberry", 37}}, 
     2: []Thing{Thing{"johndoe", 22}}, 
    } 

편집

func nameIn(things []Thing, name string) bool { for _, thing := range things { if thing.name == name { return true } } return false } if nameIn(myMap[100], "John") { ... 

슬라이스가 정말로 크고 속도가 문제가되는 경우 map[string]int과 같은 역방향 조회 맵을 유지할 수 있습니다. 여기서 항목은입니다. 10이지만 맵 수정을 수행 할 사용자 정의 함수를 사용해야 할 가능성이 높기 때문에 역방향 조회도 변경할 수 있습니다. 또한 고유 한 이름을 요구하여 제한됩니다.

대부분 nameIn 일 가능성이 높습니다.

+0

당신은 좋은 지적을 제기합니다. "다중 값"으로 "다중 필드"를 의미하고'map [int] * Thing'이면 충분할까? – captncraig

+0

nvm. 덧글을 다시 읽으십시오. 그는 구조체를 원한다고 생각합니다. 아마도. – captncraig

+0

감사합니다. 나는 꽤 나쁜 모양에있는 유산 자료에 종사하고있다. 그래서 여기에서하려고하는 것은 myMap [100] = {map [ "john": 42], map [ "Alice": 32], map [ "Fred": 19]과 같은 것입니다. 이 데이터를 처리해야하는 이상한 방법입니다. – Parag

2

이동 중에 키/값 모음을 map이라고합니다. myMap := map[keyType]valType{}

일반적으로 mapA := map[string]int{}과 같은 것을 만듭니다. 키 당 여러 값을 저장하려는 경우 다음과 같이 입력하십시오.

mapB := map[string][]string{} 각 요소 자체는 문자열 조각입니다. 그런 다음 같은과 구성원을 추가 할 수 있습니다 : 좋은 읽기는 의견에 응답에 Go maps in action

+0

고마워요. 유용 했어! – Parag

관련 문제