সুইফট 4 যেহেতু আপনি খুব সহজেই এটি করতে পারেন। আছে দুই নতুন initializers যে tuples একটি ক্রম থেকে (কী এবং মান যুক্ত জোড়া) একটি অভিধান নির্মাণ। কীগুলি অনন্য হওয়ার গ্যারান্টিযুক্ত থাকলে আপনি নিম্নলিখিতটি করতে পারেন:
let persons = [Person(name: "Franz", position: 1),
Person(name: "Heinz", position: 2),
Person(name: "Hans", position: 3)]
Dictionary(uniqueKeysWithValues: persons.map { ($0.position, $0.name) })
=> [1: "Franz", 2: "Heinz", 3: "Hans"]
কোনও কী ডুপ্লিকেট করা থাকলে এটি রানটাইম ত্রুটির সাথে ব্যর্থ হবে। সেক্ষেত্রে আপনি এই সংস্করণটি ব্যবহার করতে পারেন:
let persons = [Person(name: "Franz", position: 1),
Person(name: "Heinz", position: 2),
Person(name: "Hans", position: 1)]
Dictionary(persons.map { ($0.position, $0.name) }) { _, last in last }
=> [1: "Hans", 2: "Heinz"]
এটি আপনার লুপের মতো আচরণ করে। আপনি যদি মানগুলি "ওভাররাইট" করতে না চান এবং প্রথম ম্যাপিংটিতে আটকে থাকেন তবে আপনি এটি ব্যবহার করতে পারেন:
Dictionary(persons.map { ($0.position, $0.name) }) { first, _ in first }
=> [1: "Franz", 2: "Heinz"]
সুইফট 4.2 একটি যোগ তৃতীয় সূচনাকারী একটি অভিধানের মধ্যে যে গ্রুপ ক্রম উপাদান। অভিধান কীগুলি ক্লোজার দ্বারা উত্পন্ন হয়। একই কী সহ উপাদানগুলি ক্রম হিসাবে একই ক্রমে একটি অ্যারেতে রাখা হয়। এটি আপনাকে উপরের মতো একই ফলাফল অর্জন করতে দেয়। উদাহরণ স্বরূপ:
Dictionary(grouping: persons, by: { $0.position }).mapValues { $0.last! }
=> [1: Person(name: "Hans", position: 1), 2: Person(name: "Heinz", position: 2)]
Dictionary(grouping: persons, by: { $0.position }).mapValues { $0.first! }
=> [1: Person(name: "Franz", position: 1), 2: Person(name: "Heinz", position: 2)]
[position:name]
নাকি[position:[name]]
? যদি আপনার একই পদে দু'জন লোক থাকে তবে আপনার অভিধানটি কেবল আপনার লুপের মধ্যে থাকা শেষটিকেই রাখবে .... আমার একটি অনুরূপ প্রশ্ন রয়েছে যার জন্য আমি একটি সমাধান খুঁজতে চাইছি, তবে আমি চাই ফলাফলটি এর মতো হোক[1: [p1, p3], 2: [p2]]