গোলং মানচিত্রের মাধ্যমে আইট্রেট করা


89

আমার ধরণের মানচিত্র রয়েছে: map[string]interface{}

এবং পরিশেষে, আমি এর মতো কিছু তৈরি করতে পারি (গোয়ামল ব্যবহার করে একটি ইউএমএল ফাইল থেকে ডিসরিয়ালেস করার পরে)

mymap = map[foo:map[first: 1] boo: map[second: 2]]

আমি কীভাবে এই মানচিত্রের মাধ্যমে পুনরাবৃত্তি করতে পারি? আমি নিম্নলিখিত চেষ্টা করেছিলাম:

for k, v := range mymap{
...
}

তবে আমি একটি ত্রুটি পেয়েছি:

cannot range over mymap
typechecking loop involving for loop

সাহায্য করুন.


এটি একটি পরীক্ষার কেস সরবরাহ করা সম্ভব? আপনি যা পোস্ট করেছেন তা থেকে সমস্যাটি নির্ণয় করা শক্ত, কারণ আপনি যা পোস্ট করেছেন তার অন্তর্গত এমন কিছুই নেই যা টাইপ চেকিং লুপের কারণ হতে পারে। বিশেষত, আপনি কীভাবে কোনও ফাংশন বডিতে টাইপ চেকিং লুপ পাবেন তা নির্ধারণ করতে আমার সমস্যা হচ্ছে।
স্টিভম্যাককিউবার্ক

উত্তর:


107

উদাহরণ স্বরূপ,

package main

import "fmt"

func main() {
    type Map1 map[string]interface{}
    type Map2 map[string]int
    m := Map1{"foo": Map2{"first": 1}, "boo": Map2{"second": 2}}
    //m = map[foo:map[first: 1] boo: map[second: 2]]
    fmt.Println("m:", m)
    for k, v := range m {
        fmt.Println("k:", k, "v:", v)
    }
}

আউটপুট:

m: map[boo:map[second:2] foo:map[first:1]]
k: boo v: map[second:2]
k: foo v: map[first:1]

4

আপনি এটি এক লাইনে তৈরি করতে পারেন:

mymap := map[string]interface{}{"foo": map[string]interface{}{"first": 1}, "boo": map[string]interface{}{"second": 2}}
for k, v := range mymap {
    fmt.Println("k:", k, "v:", v)
}

আউটপুট হল:

k: foo v: map[first:1]
k: boo v: map[second:2]

21
প্রবাদটি দেখুন: চালাক হবেন না, সুস্পষ্ট হয়ে উঠুন। ও-লাইনারগুলি গোয়ে গোল নয়।
Inanc Gumus

2

আপনি এটি কেবল এই জাতীয় বহুরেখায় লিখতে পারেন,

$ cat dict.go
package main

import "fmt"

func main() {
        items := map[string]interface{}{
                "foo": map[string]int{
                        "strength": 10,
                        "age": 2000,
                },
                "bar": map[string]int{
                        "strength": 20,
                        "age": 1000,
                },
        }
        for key, value := range items {
                fmt.Println("[", key, "] has items:")
                for k,v := range value.(map[string]int) {
                        fmt.Println("\t-->", k, ":", v)
                }

        }
}

এবং আউটপুট:

$ go run dict.go
[ foo ] has items:
        --> strength : 10
        --> age : 2000
[ bar ] has items:
        --> strength : 20
        --> age : 1000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.