2010-12-04 19 views
5
में एक सूची का अद्यतन कर रहा है टपल तत्वों

एक कार्यक्रम मैं हास्केल में लिख रहा हूँ मेरी परिभाषित प्रकार की एक सूची उदाहरण है मान, लेकिन स्ट्रिंग उस समय सूची में नहीं हो सकता है।हास्केल

के बाद से हास्केल सूचियों अपरिवर्तनीय हैं, मैंने तय कर लिया सबसे आसान तरीका है (स्यूडोकोड में) यह करने के लिए किया गया था:

if a tuple containing the string exists: 
    delete it 

add the correct data 

मैं जानना चाहता हूँ:

क) अगर कोई ऐसा करने के लिए एक आसान तरीका है इस

ख) यदि नहीं, तो मैं कैसे सही तत्व को हटाने

धन्यवाद के बारे में जाना होगा

उत्तर

5

यह एक सहयोगी मानचित्र की तरह दिखता है। मैं Data.Map का उपयोग करूंगा। इसे अन्य भाषाओं में "शब्दकोश" के रूप में जाना जाता है। Map.insert आपको जो चाहिए वह करता है।

+0

एसोसिएशन सूची के स्थान पर 'Data.Map' का उपयोग करना हमेशा अच्छा विचार नहीं है। 'Data.Map' एक बड़ी डेटा संरचना के लिए केवल तेज़ है, और अक्सर एसोसिएशन सूची का उपयोग करना आसान होता है और क्लीनर कोड में परिणाम होता है। यहां हमारे पास कोई जानकारी नहीं है कि एसोसिएशन सूची का उपयोग कैसे किया जा रहा है या डेटा कैसा दिखता है, इसलिए यह कहना मुश्किल है। – Yitz

+0

@Yitz, मुझे लगता है कि मैं एसोसिएशन सूचियों के बारे में आपके दावे को चुनौती देता हूं जो "सरल" होता है। मैंने कभी इसका अनुभव नहीं किया है। – luqui

+0

ऐसा होना चाहिए क्योंकि आप अक्सर 'Data.Map' तक पहुंचते हैं। :) – Yitz

3

लगता है कि इस का सबसे अच्छा तरीका

filter (\x -> fst x /= s) xs 

किसी भी और अधिक मदद की, धन्यवाद वैसे भी जरूरत नहीं है करने के लिए किया जाएगा।

+1

जो 'x' की _all_ प्रविष्टियों को हटा देगा (जो वास्तव में आप चाहते हैं)। यदि आप केवल एक को हटाना चाहते हैं (या जानते हैं कि केवल एक ही मैच है) तो बस डेटा का उपयोग करें। लिस्ट.डिलेट: 'हटाएं ((== एस)। Fst) xs'। यदि आप इसका उपयोग करते हैं, तो मुझे लगता है कि आपके पास डेटा में अन्य कार्यों के लिए उपयोग होगा। सूची, जैसे कि ['lookup'] (http://hackage.haskell.org/packages/archive/base/latest/doc /html/Data-List.html#v:lookup) और शायद ['insert'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-List.html#v : सम्मिलित)। –

0

मैं हास्केल के लिए नौसिखिया हूं। सिर्फ मनोरंजन के लिए।

func xs str value = (str, value) : foldr step [] xs where 
     step x acc 
      | fst x == str = acc 
      | otherwise = x:acc 
0

Data.List.Utils से addToAL आप क्या चाहते हैं नहीं करता है।

निर्दिष्ट सूची में निर्दिष्ट (कुंजी, मान) जोड़ी जोड़ता है, जो मौजूदा कुंजी को पहले से मौजूद उसी कुंजी के साथ हटा देता है।