একটি মানচিত্রের সমস্ত কী উপস্থাপিত হচ্ছে


315

গো ভাষার মানচিত্রে সমস্ত কীগুলির একটি তালিকা পাওয়ার কোনও উপায় আছে? উপাদানগুলির সংখ্যা দ্বারা প্রদত্ত len(), তবে আমার মতো মানচিত্র থাকলে:

m := map[string]string{ "key1":"val1", "key2":"val2" };

কীভাবে আমি সমস্ত কীগুলি দিয়ে পুনরুক্তি করব?

উত্তর:


544

https://play.golang.org/p/JGZ7mN0-U-

for k, v := range m { 
    fmt.Printf("key[%s] value[%s]\n", k, v)
}

অথবা

for k := range m {
    fmt.Printf("key[%s] value[%s]\n", k, m[k])
}

forবিবৃতিগুলির জন্য ল্যাঙ্গুয়েজ স্পেসগুলি নির্দিষ্ট করে যে প্রথম মানটি মূল, দ্বিতীয় ভেরিয়েবলটি মান, তবে উপস্থিত থাকতে হবে না।


22
একটি সম্ভাব্য গোচা হিসাবে, নোট করুন যে পুনরাবৃত্তির ক্রমটি পূর্বনির্ধারিত। groups.google.com/d/msg/golang-nuts/YfDxpkI34hY/4pktJI2ytusJ
mna

23
সুধীর: গোলং ভাষার বিশেষায়িতভাবে মানচিত্রের কীগুলির অপরিজ্ঞাত ক্রম হিসাবে স্পষ্টভাবে সংজ্ঞা দেওয়া হয়েছে। তদ্ব্যতীত, Go 1 সাল থেকে, কোনও অর্ডারের উপর নির্ভরতা রোধ করতে মূল অর্ডারটি ইচ্ছাকৃতভাবে রানগুলির মধ্যে এলোমেলোভাবে তৈরি করা হয়।
মার্ক রেনুফ

6
মনে রাখবেন যে এটি কোনও পরিবর্তনযোগ্য পুনরাবৃত্তি নয়, যার অর্থ একটি কী মুছে ফেলার জন্য আপনাকে পুনরাবৃত্তি পুনরায় আরম্ভ করতে হবে।
রিক স্মিথ

ছোট ডেটা সেটগুলির জন্যও মানচিত্রের অর্ডার অনুমানযোগ্য হতে পারে।
Woot

14

sliceমানচিত্র-কীগুলি পাওয়ার জন্য এখানে কিছু সহজ উপায় ।

// Return keys of the given map
func Keys(m map[string]interface{}) (keys []string) {
    for k := range m {
        keys = append(keys, k)
    }
    return keys
}

// use `Keys` func
func main() {
    m := map[string]interface{}{
        "foo": 1,
        "bar": true,
        "baz": "baz",
    }
    fmt.Println(Keys(m)) // [foo bar baz]
}

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

func Keys(m map[interface{}]interface{}) (keys []interface{}), @ রবার্টটি.এমসি গিবন আপনাকে "প্রোটোটাইপ" ফাংশনটি পরিবর্তন করতে হবে
a8m

1
@ArielM। এটি কেবল সঠিক ধরণের জন্য কাজ করবে map[interface{}]interface{}। গো জেনেরিক সমর্থন করে না। আপনি কোনও mapপ্যারামিটার দিয়ে কোনও ফাংশন তৈরি করতে পারবেন না যা বিভিন্ন কী ধরণের মানচিত্র গ্রহণ করে।
আইজজা

10

গো ভাষার মানচিত্রে সমস্ত কীগুলির একটি তালিকা পাওয়ার কোনও উপায় আছে?

ks := reflect.ValueOf(m).MapKeys()

আমি কীগুলি সমস্ত কী দিয়ে পুনরাবৃত্তি করব?

গৃহীত উত্তরটি ব্যবহার করুন:

for k, _ := range m { ... }

1
আমি মনে করি আপনি বোঝাতে চেয়েছিলেন for _, k := range v.MapKeys(), যেহেতু আপনার উদাহরণ হিসাবে, kকীগুলির
ব্রায়ান লেশম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.