回答
你可能只需要輸入自己的函數(我們將使用模式匹配)本:
fst3 :: (a, b, c) -> a
fst3 (x, _, _) = x
,你使用它像:
fst3 ("string", 1, 1)
感謝您使用此解決方案。 – ZeeeeeV
謝謝,這正是我一直在尋找的。 – user2214957
@ user2214957如果您不知道(我認爲您是新用戶):當您決定最喜歡哪個答案時,您應該接受它作爲最佳/正確答案。 – Martinsos
你可以這樣做:
Prelude> let [(a,_,_)]=[("string",1,1)]
Prelude> a
"string"
我只是定義一個函數
fst3 :: (a,b,c) -> a
fst3 (x,_,_) = x
這很容易理解,不會有一個奇怪的類型(sel1
類型爲Sel1 a b => a -> b
這可能會造成混淆)
或者你可以提取您通過模式匹配有興趣在[x | (x,_,_) <- myThreeTupleList
值。
最後,最好的解決方案是使用更結構化的數據類型!當然,字符串和兩個整數攜帶更多的含義,這是一個好主意,編碼莫名其妙......
@Martinsos:這是這個函數的一個非常常見的名字;例如參見[MissingH軟件包](http://hackage.haskell.org/packages/archive/MissingH/1.1.1.0/doc/html/Data-Tuple-Utils.html)。實際上,我認爲應該在2008年將其添加到Data.Tuple中:請參閱[圖書館郵件列表上的此消息](http://comments.gmane.org/gmane.comp.lang.haskell.libraries/8841) 。 – yatima2975
sel
可以通過以下方式使用:
$ cabal install tuple
$ ghci
>>> :m +Data.Tuple.Select
>>> sel1 ("string",1,1)
"string"
它像任何其他功能map
>>> map sel1 [("One",1,0),("Two",2,0),("Three",3,0)]
["One","Two","Three"]
主要優點是,它適用於更大的元組
>>> sel1 ("string",1,1,1)
"string"
以及標準元組
>>> sel1 ("string",1)
"string"
因此沒有不需要單獨處理它們。
一些例子:
>>> map sel2 [("One",1,0),("Two",2,0),("Three",3,0)]
[1,2,3]
(0.06 secs, 4332272 bytes)
>>> map sel3 [("One",1,0),("Two",2,0),("Three",3,0)]
[0,0,0]
(0.01 secs, 2140016 bytes)
>>> map sel4 [("One",1,0),("Two",2,0),("Three",3,0)]
<interactive>:6:5:
.... error
您還可以使用 lens包:
> import Control.Lens
> Prelude Control.Lens> view _1 (1,2) -- Or (1,2) ^. _1
1
> Prelude Control.Lens> view _1 (1,2,3) -- Or (1,2,3) ^. _1
1
> Prelude Control.Lens> view _1 (1,2,3,4) -- Or (1,2,3,4) ^. _1
1
> Prelude Control.Lens> view _1 (1,2,3,4,5) -- Or (1,2,3,4,5) ^. _1
1
這個工程的不僅僅是第一個元素更
> import Control.Lens
> Prelude Control.Lens> view _2 (1,2) -- Or (1,2) ^. _2
2
> Prelude Control.Lens> view _3 (1,2,3) -- Or (1,2,3) ^. _3
3
> Prelude Control.Lens> view _4 (1,2,3,4) -- Or (1,2,3,4) ^. _4
4
> Prelude Control.Lens> view _5 (1,2,3,4,5) -- Or (1,2,3,4,5) ^. _5
5
我也寫了一個回答類似的問題,涵蓋的不僅僅是元組: https://stackoverflow.com/a/23860744/128583
- 1. 哈斯克爾scanl元組
- 2. 哈斯克爾,返回一個元組
- 3. 對以元組。(哈斯克爾)
- 4. 哈斯克爾模式匹配元組
- 5. 在哈斯克爾
- 6. 在哈斯克爾
- 7. 在哈斯克爾
- 8. 在哈斯克爾
- 9. 在哈斯克爾
- 10. 組成哈斯克爾
- 11. 哈斯克爾
- 12. 哈斯克爾
- 13. 哈斯克爾
- 14. Control.Monad.Writer哈斯克爾
- 15. 哈斯克爾 - div`
- 16. Control.Monad.State哈斯克爾
- 17. zipWith哈斯克爾
- 18. 哈斯克爾Monad.Writer
- 19. {}在.cabal在哈斯克爾
- 20. 哈斯克爾 - 布爾RoseTree
- 21. 哈斯克爾:在功能
- 22. 警衛在哈斯克爾
- 23. 哈斯克爾三重訪問元素
- 24. 哈斯克爾:一元lambda函數
- 25. 哈斯克爾!操作員組合
- 26. 哈斯克爾組數據類型
- 27. 哈斯克爾函數組合混淆
- 28. 哈斯克爾組合和排列
- 29. 哈斯克爾多個條件組合
- 30. 插件組到構造哈斯克爾
可能欺騙http://stackoverflow.com/questions/5844347/haskell-accessing-a-specific-element-in-a-元組。 –