কীভাবে তালিকার বাইরে থাকা [বিকল্প] ফিল্টার করবেন?


105

List[Option[A]]স্ক্যালায় আমার যদি একটি থাকে তবে Noneমানগুলি ফিল্টার করার মূর্তিযুক্ত উপায় কী?

একটি উপায় নিম্নলিখিত ব্যবহার করা হয়:

val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)

আরও কি "আইডোমেটিক" উপায় আছে? এটি বেশ সহজ বলে মনে হচ্ছে না।


1
সম্পর্কিত: stackoverflow.com/questions/4730842/...
— dskrvk

উত্তর:


161

আপনি যদি একই সময়ে বিকল্পগুলি থেকে মুক্তি পেতে চান তবে আপনি এটি ব্যবহার করতে পারেন flatten:

scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)

23
আমি যোগ হবে flatMapআর অন্য তালিকা উপাদান প্রক্রিয়া করতে ব্যবহার করা যেতে পারে Noneএস, অনুরূপ someList.flatten.map, যেমন এক প্রায়ই এবং এই উপাদানগুলির কাজ করতে চায় শুধু flattenমজা বাইরে তালিকা।
— ফ্রাঙ্ক

হ্যাঁ, ফিল্টারড তালিকাটি নিয়ে তিনি কী করবেন বলে আমি রাফকে জিজ্ঞাসা করতে দ্বিধা বোধ করি। তবে এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে আপনি কেবল চ্যাপ্টা করতে চান।
— নিকোলাস

কখনও কখনও আমি Optionঅবজেক্টগুলির বিষয়বস্তু পুনরুদ্ধার করতে চাই , তবে অন্য সময়গুলি এগুলি হিসাবে থাকা প্রয়োজন Option[A]। Option[A]শীতল বৈশিষ্ট্যের জন্য আমি আরও এবং আরও বেশি ব্যবহার খুঁজে পাচ্ছি ।
— রাল্ফ

এখানে কি সমতুল্য ফ্ল্যাটফোর্যাচ টাইপ পদ্ধতি আছে?
— সিডিএমকেই

1
যদি আপনি সংগ্রহটি পরিবর্তনযোগ্য না হন তবে ফল্টম্যাপটি কৌশলটি করবে। যদি আপনার সংগ্রহটি পরিবর্তনযোগ্য হয়, না, নেই।
— নিকোলাস


2

catsলাইব্রেরি রয়েছে flattenOption, যা সক্রিয় কোনো F[Option[A]]একটি বা F[A](যেখানে F[_]একটি হল FunctorFilter)

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.