我需要从这个2D列表中过滤出空位置,但只有在已经过滤后才能获得索引列表,这意味着索引不再与这些位置曾经是2D的一部分时的索引相匹配阵列。
list :: List Char
list = ['X',' ',' ','O','O',' ','X',' ',' ']
openPositionIndexes = List.filter (\pos -> pos == empty) list
|> (List.indexedMap (\i pos -> i))
-- [0,1,2,3,4] : List Int
我需要的是[1, 2, 5, 7, 8]
作为openPositionIndexes而不是[0,1,2,3,4]
,因为那些索引是错误的,它们是基于过滤的list
结果,而不是list
数组中找到的原始索引。
您必须首先通过List.indexedMap
运行它,然后保存索引以及值以供以后使用。在这里,我将它们组合在一个元组中:
openPositionIndexes =
list
|> List.indexedMap (\i cell -> ( i, cell ))
|> List.filter (\( _, cell ) -> cell == empty)
|> List.map Tuple.first
或使用记录:
openPositionIndexes =
list
|> List.indexedMap (\i cell -> { index = i, cell = cell })
|> List.filter (\{ cell } -> cell == empty)
|> List.map .index