কীভাবে কোনও মানচিত্র সাফ করবেন?


86

আমি .clear() আদিম ধরণের জন্য সি ++ ফাংশনের মতো কিছু খুঁজছি map

অথবা এর পরিবর্তে আমার কি নতুন একটি মানচিত্র তৈরি করা উচিত?

আপডেট: আপনার উত্তরের জন্য আপনাকে ধন্যবাদ। উত্তরগুলি দেখে আমি কেবল বুঝতে পেরেছিলাম যে কখনও কখনও নতুন মানচিত্র তৈরি করার ফলে আমরা চাই না এমন কিছু অসঙ্গতি সৃষ্টি হতে পারে। নিম্নলিখিত উদাহরণ বিবেচনা করুন:

var a map[string]string
var b map[string]string

func main() {
    a = make(map[string]string)
    b=a
    a["hello"]="world"
    a = nil
    fmt.Println(b["hello"])
}

আমার অর্থ, এটি .clear()সি ++ এর ক্রিয়াকলাপের থেকে এখনও পৃথক , যা বস্তুটির সামগ্রীটি সাফ করবে clear


4
এই আলোচনাটিও দেখুন: groups.google.com/d/topic/golang-nuts/6yHDC7IYCj4/ddusussion
পেরিয়াল

4
এছাড়াও অন্তর্নির্মিত
পেরিয়াল

উত্তর:


110

আপনার সম্ভবত একটি নতুন মানচিত্র তৈরি করা উচিত। বিদ্যমান মানচিত্রটি পরিষ্কার করার চেষ্টা করার কোন উদ্বেগের কারণ নেই, যদি না একই মানচিত্রটি একাধিক কোডের দ্বারা উল্লেখ করা হয় এবং এক টুকরোটিতে স্পষ্টভাবে মানগুলি পরিষ্কার করার প্রয়োজন হয় যে কোডের অন্যান্য অংশে এই পরিবর্তন দৃশ্যমান হয়।

হ্যাঁ, আপনি সম্ভবত শুধু বলা উচিত

mymap = make(map[keytype]valtype)

যদি আপনার যে কারণেই সত্যই বিদ্যমান মানচিত্রটি সাফ করার প্রয়োজন হয় তবে এটি যথেষ্ট সহজ:

for k := range m {
    delete(m, k)
}

4
সুতরাং একের পর এক উপাদান মুছে ফেলা কি এটি করার একমাত্র উপায়?
ল্যাভিন

@ ল্যাভিন: হ্যাঁ এটি করার জন্য কোনও অন্তর্নির্মিত ফাংশন নেই, এবং আপনার কাছে এমন একটি লাইব্রেরি ফাংশন থাকতে পারে না যা এটি স্বেচ্ছা মানচিত্রের জন্য করে। তবে এটি যাইহোক মাত্র 3 লাইন।
লিলি বালার্ড

6
সব মান দিয়ে পুনরুক্তি করার সময় মানচিত্রের বিষয়বস্তুগুলি সংশোধন করা কি আসলেই ঠিক আছে? অন্যান্য ভাষা এটি দিয়ে সঠিকভাবে কাজ করবে না।
জন জেফারি

4
@ জন জেফারি: পোস্ট করার আগে আমি এটি পরীক্ষা করেছিলাম। কাজ মনে হচ্ছে। অনুমানের আসল ভাষা বলছে The iteration order over maps is not specified and is not guaranteed to be the same from one iteration to the next. If map entries that have not yet been reached are deleted during iteration, the corresponding iteration values will not be produced. If map entries are inserted during iteration, the behavior is implementation-dependent, but the iteration values for each entry will be produced at most once. If the map is nil, the number of iterations is 0.এটি প্রস্তাবিত এটি সমর্থিত।
লিলি বালার্ড

18
Go 1.11 থেকে শুরু করে, এই ফর্মের মানচিত্র সাফ করার কাজগুলি সংকলক দ্বারা অনুকূলিত হয়েছে optim github.com/golang/go/blob/master/doc/go1.11.html
বেঞ্জামিন বি।

21

সি ++ এর বিপরীতে গো হ'ল আবর্জনা সংগ্রহের ভাষা। আপনাকে কিছুটা আলাদা চিন্তা করতে হবে।

যখন আপনি একটি নতুন মানচিত্র তৈরি

a := map[string]string{"hello": "world"}
a = make(map[string]string)

মূল মানচিত্র অবশেষে আবর্জনা সংগ্রহ করা হবে; আপনার এটি ম্যানুয়ালি পরিষ্কার করার দরকার নেই। তবে মনে রাখবেন যে মানচিত্রগুলি (এবং স্লাইসগুলি) রেফারেন্সের ধরণ; আপনি তাদের দিয়ে তৈরি make()। অন্তর্নিহিত মানচিত্র কেবল তখনই আবর্জনা-সংগ্রহ করা হবে যখন এর কোনও উল্লেখ নেই। সুতরাং, যখন আপনি করবেন

a := map[string]string{"hello": "world"}
b := a
a = make(map[string]string)

মূল অ্যারে আবর্জনা সংগ্রহ করা হবে না (যতক্ষণ না খ জঞ্জাল সংগ্রহ করা হয় বা খ অন্যরকম কিছু বোঝায়)।


3
// Method - I , say book is name of map
for k := range book {
    delete(book, k)
}

// Method - II
book = make(map[string]int)

// Method - III
book = map[string]int{}

-5

আপনি যদি লুপটিতে এটি করার চেষ্টা করছেন তবে আপনার জন্য মানচিত্রটি সাফ করার জন্য আপনি আরম্ভের সুবিধাটি নিতে পারেন। উদাহরণ স্বরূপ:

for i:=0; i<2; i++ {
    animalNames := make(map[string]string)
    switch i {
        case 0:
            animalNames["cat"] = "Patches"
        case 1:
            animalNames["dog"] = "Spot";
    }

    fmt.Println("For map instance", i)
    for key, value := range animalNames {
        fmt.Println(key, value)
    }
    fmt.Println("-----------\n")
}

আপনি যখন এটি কার্যকর করেন, এটি পূর্ববর্তী মানচিত্রটি সাফ করে এবং খালি মানচিত্র দিয়ে শুরু হয়। এটি আউটপুট দ্বারা যাচাই করা হয়েছে:

$ go run maptests.go 
For map instance 0
cat Patches
-----------

For map instance 1
dog Spot
-----------

4
এটি মানচিত্রটি সাফ করছে না তবে একটি নতুন মানচিত্র তৈরি করছে এবং প্রতিটি লুপের সাথে একই নামের সাথে স্থানীয় ভেরিয়েবলের সাথে আবদ্ধ।
ডেলানি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.