কী দ্বারা অভিধান বাছাই করুন


128

আমি সুইফটে একটি অভিধান বাছাই করতে চাই। আমার মতো অভিধান রয়েছে:

"A" => Array[]
"Z" => Array[]
"D" => Array[]

ইত্যাদি আমি চাই এটির মতো হওয়া

"A" => Array[]
"D" => Array[]
"Z" => Array[]

প্রভৃতি

আমি এসও তে অনেকগুলি সমাধান চেষ্টা করেছি কিন্তু কেউই আমার পক্ষে কাজ করেনি। আমি এক্সকোডি 6 বিটা 5 ব্যবহার করছি এবং এর উপর কিছু সংকলক ত্রুটি দিচ্ছে এবং কিছু সমাধান ব্যতিক্রম দিচ্ছে। সুতরাং যে কেউ অভিধানের বাছাইয়ের ওয়ার্কিং কপি পোস্ট করতে পারে।



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

@ ডাসব্লিংকনলাইট তাই আপনি কী আমাকে তাড়াতাড়ি একটি অ্যারে বাছাই করতে পারেন?
আলেম আহমেদ

@ আলেমআহমাদ এই উত্তরটি একবার দেখুন , এটির sortedKeysকার্যকারিতা রয়েছে।
dasblinkenlight

@ ডাসব্লিংকনলাইট আমি এটি চেষ্টা করেছি তবে এটি [কী টাইপ] এ ত্রুটি দিচ্ছে
আলেম আহমেদ

উত্তর:


167
let dictionary = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]

সম্পাদনা করুন:

উপরের কোড থেকে বাছাই করা অ্যারেতে কেবল কী রয়েছে তবে মানগুলি মূল অভিধান থেকে পুনরুদ্ধার করতে হবে। তবে 'Dictionary'এটি একটি 'CollectionType'(কী, মান) জোড়াও এবং আমরা 'sorted'কী এবং মান উভয়কে আলাদা করে সাজানো অ্যারে পেতে গ্লোবাল ফাংশনটি ব্যবহার করতে পারি :

let sortedKeysAndValues = sorted(dictionary) { $0.0 < $1.0 }
println(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]

সম্পাদনা 2: মাসিক পরিবর্তিত সুইফট সিনট্যাক্স বর্তমানে পছন্দ করে

let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]

গ্লোবাল sortedহ্রাস করা হয়।


এটি আপনাকে কীগুলির একটি অ্যারে দেয়। অ্যারেতে মানগুলির অভাব রয়েছে। আমার ধারণা, আপনি অভিধান থেকে মানগুলি খুঁজে পেতে পারেন।
স্টিলিসক্রিসিস

2
তুমি ঠিক. কীগুলি অনুসারে বাছাই করা (কী, মান) জোড়াগুলির অ্যারে পাওয়ার জন্য সমাধান সরবরাহ করার জন্য আমি পোস্টটি সম্পাদনা করেছি। মন্তব্যের জন্য ধন্যবাদ.
আইভিকা এম।

@IvicaM। হ্যালো! আমি কী দ্বারা কীভাবে অভিধানটি বাছাই করতে পারি তা বুঝতে পেরেছি, তবে আমি কীভাবে অভিধানে উপাদানগুলির অ্যারে বাছাই করতে পারি তা বুঝতে পারি না। আমাকে সাহায্য করুন. উদাহরণস্বরূপ ব্যক্তিগত বারের পরিচিতি: [(স্ট্রিং, [ব্যবহারকারী])] = []
আলেকজান্ডার খিতেভ

5
সুইফট 3 = অ্যারে (ডিকশনারি.কিগুলি)। সাজানো (লিখেছেন: <)
মিফ

4
সুইফ্ট 4 হিসাবে, আপনি লিখতে পারেনlet sortedKeys = dictionary.keys.sorted()
কোড ডিফারেন্স

113

সুইফট ২.০

আইভিকা এম এর উত্তরের আপডেট সংস্করণ:

let wordDict = [
     "A" : [1, 2],
     "Z" : [3, 4],
     "D" : [5, 6]
]

let sortedDict = wordDict.sort { $0.0 < $1.0 }
print("\(sortedDict)") // 

সুইফট 3

wordDict.sorted(by: { $0.0 < $1.0 })

বিজ্ঞপ্তি:

অবাক হবেন না যে ফলাফলের ধরনটি অভিধানের পরিবর্তে একটি অ্যারে হয় is ডিকশনারি বাছাই করা যায় না ! @ আইভিকার উত্তরের মতো, ফলাফলযুক্ত ডেটা-টাইপ বাছাই করা অ্যারে is


26
এটি আসলে একটি অভিধানে নয় [(স্ট্রিং, [ইনট]] এর একটি অ্যারে দেয়
স্কোর

4
অনুধাবন করা ডিকোরিয়জগুলি অরসেটেড, সুতরাং যাইহোক ডেটা টাইপটি পুনরায় তৈরি করা এতে কোনও তাত্পর্যপূর্ণ নয়। আমি কেবল সাজানো কীগুলির একটি অ্যারে সঞ্চয় করে শেষ করেছি।
স্কোর

আমি Binary operator > can not be compared to two কোনও অপারেটস পাই। ডাউনকাস্টিং কোনওভাবেই কাজ করে না
শন

27

আপনি যদি কী বা মান অনুসারে বাছাই করা ক্রমে দুটি পুনরুক্ত করতে চান তবে এই ফর্মটি বেশ সুসংহত

let d = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

for (k,v) in Array(d).sorted({$0.0 < $1.0}) {
    println("\(k):\(v)")
}

বাছাই করা হয় কাস্টম পদ্ধতি বা কি? এটি প্রয়োগ করার সময় ত্রুটি দেখানো হচ্ছে
রিক্কি

@rikkyG সুইফট 1: sortএবং sorted। সুইফট 2: sortহয়ে গেছে sortInPlaceএবং sortedহয়ে গেছে sort
এরিক আয়া

14

দ্রুত 4 এ আপনি এটি আরও স্মার্ট লিখতে পারেন:

let d = [ 1 : "hello", 2 : "bye", -1 : "foo" ]
d = [Int : String](uniqueKeysWithValues: d.sorted{ $0.key < $1.key })

3
প্রচেষ্টার জন্য ধন্যবাদ তবে সবার আগে, "লেটস" কোডটি তৈরি করে না, তাই প্রথমে এটি "var" হওয়া দরকার। সংকলন সফল হওয়ার পরে এই কোডটি কাজ করে না এটি অভিধানটি বাছাই করে না এই কোডটি চালানোর আগে এবং পরে একই ফলাফল আমি পাই। হয়তো আমি কিছু মিস করছি তবে দয়া করে আরও বিস্তারিত বা কোডটি পরিবর্তন করুন। ======= ভার ডি = [1: "হ্যালো", 2: "বাই", -1: "ফু"] মুদ্রণ (ডি) - >>> মুদ্রণগুলি [2: "বাই", -1: " foo ", 1:" হ্যালো "] ডি = [অন্ত: স্ট্রিং] (অনন্যকিজ উইথওয়ালিয়াস: d.sort {$ 0.key <$ 1.key}) মুদ্রণ (d) - >>> প্রিন্টস [2:" বাই ", -1 : "
ফু

এটা সম্ভব নয় যেমন যখন আপনি এটি ফিরিয়ে অভিধান রূপান্তর এটি unordered সংগ্রহ হিসেবে দ্রুতগতি মধ্যে অভিধান হয় unordered সংগ্রহ পরিবর্তন করতে হবে developer.apple.com/documentation/swift/dictionary
Jaimin

12

উপরোক্ত সকলের চেষ্টা করেছি, সংক্ষেপে আপনার যা যা প্রয়োজন তা

let sorted = dictionary.sorted { $0.key < $1.key }
let keysArraySorted = Array(sorted.map({ $0.key }))
let valuesArraySorted = Array(sorted.map({ $0.value }))


6

সুইফ্ট 4 এর জন্য নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে:

let dicNumArray = ["q":[1,2,3,4,5],"a":[2,3,4,5,5],"s":[123,123,132,43,4],"t":[00,88,66,542,321]]

let sortedDic = dicNumArray.sorted { (aDic, bDic) -> Bool in
    return aDic.key < bDic.key
}

5
এটি কোনও অভিধান ফেরায় না, এটি
টিপলগুলির

সংজ্ঞা টিপলসের একটি অ্যারে আপনি করতে পারেন সেরা।
জন মন্টগোমেরি

1
আমি এটি জানি, তবে প্রশ্নটি অর্ডার চেয়েছে, সুতরাং এই উত্তরটি সঠিক নয়। তুমি কি একমত?
ড্যানিয়েল আরান্তেস লাভার্ড

6

অভিধানটি বাছাই করার জন্য এটি একটি মার্জিত বিকল্প:

সুইফট 4 এবং 5 হিসাবে

let sortedKeys = myDict.keys.sorted()

for key in sortedKeys {
   // Ordered iteration over the dictionary
   let val = myDict[key]
}

5

ইন সুইফট 5 , যাতে অভিধান Keys দ্বারা বাছাই করতে

let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.0 < $1.0 })

ভ্যালু অনুসারে অভিধানটি বাছাই করার জন্য

let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.1 < $1.1 })

4

সুইফট 3 এর জন্য, নিম্নলিখিত বাছাই করা কীগুলি অনুসারে সাজানো অভিধানটি ফেরত দেয়:

let unsortedDictionary = ["4": "four", "2": "two", "1": "one", "3": "three"]

let sortedDictionary = unsortedDictionary.sorted(by: { $0.0.key < $0.1.key })

print(sortedDictionary)
// ["1": "one", "2": "two", "3": "three", "4": "four"]

10
এটি কোনও অভিধান ফেরত দেবে না, এটি টিপলসের একটি অ্যারে ফিরে আসবে
anoop4real

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

3

আইওএস 9 এবং এক্সকোড 7.3 এ "সাজানো", সুইফট ২.২ অসম্ভব, "সাজানো" কে "সাজান" এ পরিবর্তন করুন:

let dictionary = ["main course": 10.99, "dessert": 2.99, "salad": 5.99]
let sortedKeysAndValues = Array(dictionary).sort({ $0.0 < $1.0 })
print(sortedKeysAndValues)

//sortedKeysAndValues = ["desert": 2.99, "main course": 10.99, "salad": 5.99]

3
SortKeysAndValues ​​এর ফলাফল অভিধান নয়, এটি একটি অ্যারে!
চ্যানেল

2
ফলে একটি হল Arrayএর Tuples, না একটিDictionary

2

সুইফট 5

আপনার অভিধানটি ইনপুট করুন যা আপনি কী অনুসারে বর্ণমালা অনুসারে বাছাই করতে চান।

// Sort inputted dictionary with keys alphabetically.
func sortWithKeys(_ dict: [String: Any]) -> [String: Any] {
    let sorted = dict.sorted(by: { $0.key < $1.key })
    var newDict: [String: Any] = [:]
    for sortedDict in sorted {
        newDict[sortedDict.key] = sortedDict.value
    }
    return newDict
}

: ({$ 0.key <$ 1.key} দ্বারা) dict.sorted এটি দ্বারা স্ব একটি ফেরৎ tuple (মান, মান) একটি পরিবর্তে অভিধান [মান: VALUE]। সুতরাং, for লুপটি অভিধান হিসাবে ফিরে আসার জন্য টিপলকে পার্স করে। এইভাবে, আপনি একটি অভিধান রেখেছেন এবং একটি অভিধান ফিরে পান।


2

সুইফট 4 এবং 5

স্ট্রিং কী বাছাইয়ের জন্য:

dictionary.keys.sorted(by: {$0.localizedStandardCompare($1) == .orderedAscending})

উদাহরণ:

var dict : [String : Any] = ["10" : Any, "2" : Any, "20" : Any, "1" : Any]

dictionary.keys.sorted() 

["1" : Any, "10" : Any, "2" : Any, "20" : Any]

dictionary.keys.sorted(by: {$0.localizedStandardCompare($1) == .orderedAscending})

["1" : Any, "2" : Any, "10" : Any, "20" : Any]


1

সুইফ্ট 3 এর জন্য নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে এবং সুইফট 2 সিনট্যাক্সটি কাজ করে নি:

// menu is a dictionary in this example

var menu = ["main course": 10.99, "dessert": 2.99, "salad": 5.99]

let sortedDict = menu.sorted(by: <)

// without "by:" it does not work in Swift 3

এই উত্তরটি বেশ অসম্পূর্ণ। কী sortedDict? কী menu? এই কোডটি বৈধ বলে মনে হয় না।
এলোমেলো_ ব্যবহারকারীর_নাম

আরও গুরুতর কিছু: একটি অভিধানের কোনও অর্ডার নেই । আপনার কোডটি দিয়ে আপনি কী পান তা একটি সাজানো অভিধান নয়, একটি সাজানো অভিধান - যেমন ইতিমধ্যে কিছু উত্তর এবং মন্তব্যে বলা হয়েছে।
এরিক আয়া

বিষয়টি হ'ল কীগুলি অনুসারে অভিধানটি সাজান, আমি এই বিষয়টির উত্তর দিচ্ছি। এবং এটি সুইফ্ট 3-এ কেবল একটি বাক্য গঠন পরিবর্তন সম্পর্কিত একটি নির্দিষ্ট মন্তব্য, এটি আগে যা লেখা হয়েছিল তা থেকে কিছু অস্বীকার করে না।
জোয়ারি

"এই উত্তরটি বেশ অসম্পূর্ণ s আমি ভেবেছিলাম এটি পরিষ্কার ছিল, এটি কেবলমাত্র সুইফট 3-তে একটি সিনট্যাক্স পরিবর্তন সম্পর্কে নির্দেশিত হিসাবে। কোডটি সুইফট 3-এ কাজ করে
জোয়েরি

সুইফট 4 plz জন্য কোন পরামর্শ?
ফ্যামফামফাম

1

সুইফট 3 বাছাই করা হয় (দ্বারা: <)

let dictionary = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

let sortedKeys = Array(dictionary.keys).sorted(by:<) // ["A", "D", "Z"]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.