2011-10-29 70 views
1

是否有一個簡單的方法來通過列表? 可以說,我想訪問不知道它是A B米蘭達通過列表

["A","A","A","A","B","A","A","A","A"] 

名單5日的數據是有辦法,我能做到這一點,而無需通過列表進行排序?

回答

4

我不知道米蘭達那麼好,但我預計功能skiptake可用。

你可以通過跳過和取出函數來解決第五個元素。當跳過和取消不可用時,自己創建它們很容易。

跳過:跳過列表中元素的y數,當y大於列表中的項目的數量越多,它會返回一個空列表

看法:發生在一個元素的第一y個列表中,當y大於列表中的項目數時,將返回完整列表。

skip y []  = [] 
skip 0 xs  = xs 
skip y (x:xs) = skip xs (y-1) 

take y []  = [] 
take 0 xs  = [] 
take y (x:xs) = x : take (y-1) xs 

elementAt x xs = take 1 (skip x xs) 
2

列表是感應數據類型。這意味着通過列表定義的函數 - 例如訪問元素 - 由遞歸定義。您正在查找的數據結構似乎是一個數組,它允許進行恆定的時間查找。查找列表中索引元素的最簡單方法是直接:

lookup :: Int -> [a] -> Maybe [a] 
lookup n []  = Nothing 
lookup 0 (x:xs) = Just x 
lookup n (x:xs) = lookup (n - 1) xs 
2

另一種方法可以使用!運營商。比方說,你有在列表中定義的數據,如程序:

plist = [A,A,A,A,B,A,A,A,A] 

然後執行plist!4會給你的列表的第5個元素。 (如果包含0,1,2,3,4,則4爲第五單元)

因此plist!4返回B.