मेरे पास Map[A, Option[B]]
है, Map[A, B]
प्राप्त करने के लिए फ़्लैटन बनाने का सबसे अच्छा तरीका क्या है?मानचित्र के लिए मानचित्र का नक्शा
मैं एक सूची हम समतल उपयोग कर सकते हैं के लिए पता है, लेकिन इस संरचना अलग
मेरे पास Map[A, Option[B]]
है, Map[A, B]
प्राप्त करने के लिए फ़्लैटन बनाने का सबसे अच्छा तरीका क्या है?मानचित्र के लिए मानचित्र का नक्शा
मैं एक सूची हम समतल उपयोग कर सकते हैं के लिए पता है, लेकिन इस संरचना अलग
खैर, वे एक ही नहीं है, तो आप क्या होता है परिभाषित करने के लिए अगर एक मूल्य कोई नहीं है एक तरह से की आवश्यकता होगी रहे हैं। मुझे लगता है आप, उन कुंजियों को अनदेखा करने के लिए अगर ऐसा है, तो आप एक आंशिक समारोह के साथ एकत्र कर सकते हैं चाहते हैं:
map.collect {
case (k, Some(v)) => k -> v
}
या एक के लिए-समझ
for ((k, Some(v)) <- map) yield k -> v
आप कोई आपत्ति नहीं है डबल यात्रा का उपयोग करें:
map.filter(_._2.nonEmpty).mapValues(_.get)
उदाहरण:
scala> Map(1 -> Some(1), 2 -> None).filter(_._2.nonEmpty).mapValues(_.get)
res9: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1)
या यह निहित का उपयोग कर: तब
implicit def flat[K,V](kv: (K, Option[V])) = kv._2.map(kv._1 -> _).toList
:
map.flatten.toMap
या का उपयोग कर (संभावित रूप से असुरक्षित) अंतर्निहित बिना:
map flatMap flat
उदाहरण:
scala> Map(1 -> Some(1), 2 -> None).flatten.toMap
res2: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1)
scala> def flat[K,V](kv: (K, Option[V])) = kv._2.map(kv._1 -> _).toList
warning: there was one feature warning; re-run with -feature for details
flat: [K, V](kv: (K, Option[V]))List[(K, V)]
scala> Map(1 -> Option(1), 2 -> None).flatMap(flat)
res29: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1)
यह ध्यान देने योग्य है कि 'नक्शा वैल्यूज' मानचित्र पर एक दृश्य देता है, जो शायद ओपी चाहता है। – jhn
@jhn निर्भर करता है, अगर नक्शा के अंदर कोड वैल्यूज मेरे उत्तर में संदर्भित पारदर्शी है, तो किसी को भी क्यों परवाह करना चाहिए? जावा-क्रमबद्धरण के लिए (यदि कोई अभी भी किसी कारण से इसका उपयोग कर रहा है), हमेशा होता है .view.force या .map (पहचान) – dk14
किसी को भी क्यों परवाह करना चाहिए? प्रदर्शन। – jhn
हाँ मुझे सटीक नहीं था कि मैं कोई भी मूल्य के साथ कुंजी नहीं चाहता, आपके उत्तर के लिए बहुत बहुत धन्यवाद! – nam
वास्तव में '((के, कुछ (v)) <- मानचित्र) उपज के -> v' पर्याप्त – dk14
बहुत सच है! मैं अपडेट करूंगा! क्या वह पैटर्न ऊपर से ऊपर और नीचे नहीं था, बेवकूफ ... –