যদি আমার মতো আপনিও একইর্টিং কোডটি একাধিক জায়গায় চান বা কোডের জটিলতাটি ঠিক রাখতে চান তবে আপনি বাছাইটি আলাদা আলাদা ফাংশনে সরিয়ে ফেলতে পারেন, যা আপনি ফাংশনটি পাস করেন আপনি চান প্রকৃত কাজ (যা অবশ্যই প্রতিটি কল সাইটে আলাদা হবে)।
মূল প্রকার K
এবং মান প্রকার সহ একটি মানচিত্র দেওয়া হয়েছে , যা নীচে এবং নীচে V
উপস্থাপন করা হয় , সাধারণ সাজানোর ক্রিয়াকলাপটি এই গো-কোড টেম্পলেটটির মতো দেখতে পারে (যা গো সংস্করণ 1 যেমনটি সমর্থন করে না):<K>
<V>
func sortedMap<K><T>(m map[<K>]<V>, f func(k <K>, v <V>)) {
var keys []<K>
for k, _ := range m {
keys = append(keys, k)
}
sort.Strings(keys) # or sort.Ints(keys), sort.Sort(...), etc., per <K>
for _, k := range keys {
v := m[k]
f(k, v)
}
}
তারপরে এটিকে ইনপুট মানচিত্র এবং একটি ফাংশন ( (k <K>, v <V>)
এটির ইনপুট আর্গুমেন্ট হিসাবে গ্রহণ ) দিয়ে কল করুন যা মানচিত্রের উপাদানগুলিকে সাজানো-কী ক্রমে বলা হয় in
সুতরাং, মঙ্গু পোস্ট করা উত্তরে কোডের একটি সংস্করণ এর মতো দেখাবে:
package main
import (
"fmt"
"sort"
)
func sortedMapIntString(m map[int]string, f func(k int, v string)) {
var keys []int
for k, _ := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
f(k, m[k])
}
}
func main() {
m := make(map[int]string)
m[1] = "a"
m[2] = "c"
m[0] = "b"
sortedMapIntString(m,
func(k int, v string) { fmt.Println("Key:", k, "Value:", v) })
}
sortedMapIntString()
ফাংশন কোন জন্য পুনরায় ব্যবহার করা যেতে পারে map[int]string
(অভিমানী একই সাজানোর ক্রম আকাঙ্ক্ষিত হয়), কোড মাত্র দুই লাইনে প্রতিটি ব্যবহারের রাখা।
ডাউনসাইড অন্তর্ভুক্ত:
- প্রথম শ্রেণীর হিসাবে ফাংশন ব্যবহারে বেআইনী লোকদের পক্ষে পড়া আরও কঠিন
- এটি ধীর হতে পারে (আমি পারফরম্যান্সের তুলনা করি না)
অন্যান্য ভাষার বিভিন্ন সমাধান রয়েছে:
- যদি
<K>
এবং <V>
(কী এবং মানের জন্য প্রকারের বোঝাতে) ব্যবহারটি কিছুটা পরিচিত দেখায় তবে সেই কোড টেম্পলেটটি সি ++ টেম্পলেটগুলির মতো ভয়ঙ্কর নয়।
- ক্লোজার এবং অন্যান্য ভাষাগুলি মৌলিক ডেটা ধরণের হিসাবে বাছাই করা মানচিত্রকে সমর্থন করে।
- যদিও আমি কোনও উপায়েই জানি না যে গো
range
প্রথম শ্রেণীর ধরণের তৈরি করে যাতে এটি কোনও কাস্টম ordered-range
( range
মূল কোডের পরিবর্তে) দ্বারা প্রতিস্থাপিত হতে পারে , তবে আমি মনে করি কিছু অন্যান্য ভাষাগুলি পুনরাবৃত্তি সরবরাহ করে যা এটি সম্পাদন করার পক্ষে যথেষ্ট শক্তিশালী are জিনিস।