2014-10-08 5 views
8

मुझे एक सूची को किसी अन्य क्रम के क्रमबद्ध करने की आवश्यकता है, लेकिन मुझे नहीं पता कि यह कैसे किया जा सकता है।किसी अन्य सूची के क्रम में एक सूची को क्रमबद्ध करें

उदाहरण के लिए:

[C, B, G, E] 

और एक सूची b (इसी क्रम सेट) की तरह:

[A, B, C, D, E, F, G, ...] 

(बस उदाहरण के रूप में, इन 'नहीं कर रहे मैं एक सूची a के समान हो सकता था टी वास्तविक मूल्य हालांकि)

फिर, सूची a सूची b जैसी ही क्रमबद्ध की जानी चाहिए और इस प्रकार क्रमबद्ध हो जाएं :

[A, B, E, G] 

क्या कोई मेरी सूची किसी अन्य सूची के क्रम में इस तरह के सॉर्टिंग को कैसे करने में मदद कर सकता है?

किसी भी मदद की बहुत सराहना की जाएगी।

उत्तर

3

यदि मैं समझता हूं, तो सूचियों में से एक अन्य सूची के सभी तत्वों का सापेक्ष आदेश देती है। अर्थात्:

> sortWithOrder [5,1,2,3,4] [1,2,3,4,5,5,4,3,2,1] 
[5,5,1,1,2,2,3,3,4,4] 

कोड का यह टुकड़ा काम करना चाहिए:

module SortWithOrder where 

import qualified Data.Map.Strict as M 
import Data.List 
import Data.Ord 

sortWithOrder :: Ord a 
       => [a] -- order list 
       -> [a] -- source list 
       -> [a] 
sortWithOrder order = sortBy (comparing getOrder) 
    where 
     getOrder k = M.findWithDefault (-1) k ordermap 
     ordermap = M.fromList (zip order [0..]) 
3

आप सूची में क्रम नक्शा और यह सॉर्ट कर सकते हैं:

Prelude> let order = zip ["A", "B", "C", "D", "E", "F", "G"] [0..] 

Prelude> let myList = ["C", "B", "G", "E"] 

Prelude> import Data.List (sort) 

Prelude> map snd . sort . map (\x -> (lookup x order, x)) $ myList 

["B","C","E","G"] 
संबंधित मुद्दे