过滤掉列表中的索引

问题描述 投票:0回答:1

我需要从这个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数组中找到的原始索引。

elm
1个回答
2
投票

您必须首先通过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
© www.soinside.com 2019 - 2024. All rights reserved.