std.collections
API summary (generated from the Beans source by npm run coverage): 11 package functions.
std.collections builtin List আর Map type-এর উপর কিছু কমন algorithm যোগ করে।
storage-টা থাকে কম্পাইলারে; এই function-গুলো তার উপরে বসানো সাদামাটা Beans কোড।
সোর্স পড়ো
stdlib/std/collections/collections.b-তে।
import std.collectionsকিছু function generic, আর এরা T implements Eq-এর মতো trait bound ব্যবহার করে।
অর্থাৎ element-এর type-টাকে সেই trait সাপোর্ট করতে হবে (যেমন সমতার জন্য Eq, map key
হতে হলে Hash, কপি হতে হলে Clone)। সাধারণত যেসব builtin type ব্যবহার করা হয়,
সেগুলো এসব আগে থেকেই সাপোর্ট করে।
List helper
“List helper” সেকশনpub fn sum_int(values: List<int>) -> intpub fn frequencies(values: List<string>) -> Map<string, int>pub fn count<T implements Eq>(values: List<T>, needle: T) -> intpub fn filter<T implements Clone>(values: List<T>, keep: fn(T) -> bool) -> List<T>pub fn transform<T implements Clone, U>(values: List<T>, apply: fn(T) -> U) -> List<U>pub fn unique<T implements Eq & Hash & Clone>(values: List<T>) -> List<T>sum_intint-এর একটা list যোগ করে দেয়।frequenciesকোন string কতবার আছে সেটা গোনে।countneedle-এর সমান কয়টা item আছে সেটা গোনে।filterশুধু সেই item-গুলো রাখে যেগুলোর জন্যkeeptrue ফেরত দেয়।transformপ্রতিটা item-এapplyচালিয়ে একটা নতুন list বানায়।uniqueডুপ্লিকেট বাদ দেয়, আর প্রথমবার দেখার ক্রমটা রাখে।
import std.ioimport std.collections
fn main() { let nums: List<int> = [3, 1, 3, 2, 1] io.println(collections.sum_int(nums)) // 10 io.println(collections.count(nums, 3)) // 2 let odds: List<int> = collections.filter(nums, fn(n: int) -> bool { return n % 2 == 1 }) io.println(odds) // [3, 1, 3, 1] io.println(collections.unique(nums)) // [3, 1, 2]}Map helper
“Map helper” সেকশনএদের কয়েকটা inout map নেয়। inout-এর অর্থ function-টা caller-এর নিজের map-টাকেই
জায়গামতো বদলে দেয়; আলাদা কোনো কপি ফেরত আসে না। কল শেষে map-এ নতুন
অবস্থাটাই থাকে।
pub fn increment<K implements Eq & Hash>(inout values: Map<K, int>, key: K, delta: int) -> intpub fn get_or_insert_with<K implements Eq & Hash, V implements Clone>(inout values: Map<K, V>, key: K, make: fn() -> V) -> Vpub fn merge_with<K implements Eq & Hash & Clone, V implements Clone>(inout target: Map<K, V>, source: Map<K, V>, combine: fn(V, V) -> V)pub fn remove_if<K implements Eq & Hash & Clone, V implements Clone>(inout values: Map<K, V>, remove: fn(K, V) -> bool) -> intpub fn map_values_with_key<K implements Eq & Hash & Clone, V implements Clone, U>(values: Map<K, V>, apply: fn(K, V) -> U) -> Map<K, U>incrementkey-এর value-তেdeltaযোগ করে, key না থাকলে 0 থেকে শুরু করে, আর নতুন count ফেরত দেয়।get_or_insert_withkey-এর value ফেরত দেয়, নয়তোmake()যা দেয় সেটা insert করে আর সেটাই ফেরত দেয়।merge_withsource-কেtarget-এর ভেতর ভাঁজ করে ঢোকায়। যে key দুই জায়গাতেই আছে, সেখানে সেcombine(old, new)রাখে।remove_ifপ্রতিটা entry বাদ দেয় যেখানেremovetrue ফেরত দেয়, আর কয়টা বাদ গেল সেটা জানায়।map_values_with_keyএকই key নিয়ে একটা নতুন map বানায়, আর value নেয়apply(key, value)থেকে।
import std.ioimport std.collections
fn main() { var counts: Map<string, int> = {} collections.increment(inout counts, "a", 1) collections.increment(inout counts, "a", 2) // counts["a"] is now 3 io.println(counts.get("a")) // some(3)}আরও দেখুন
“আরও দেখুন” সেকশন- Collections — builtin
ListআরMaptype, যাদের উপর এই helper-গুলো কাজ করে।