Arrays 如何从Elm中的数组/列表中删除给定索引处的项?

Arrays 如何从Elm中的数组/列表中删除给定索引处的项?,arrays,list,elm,Arrays,List,Elm,在给定的数组中删除索引i中的项的最优雅的方法是什么?在给定的列表中?我能想到的最好的: removeFromList i xs = (List.take i xs) ++ (List.drop (i+1) xs) removeFromArray i = Array.toList >> removeFromList i >> Array.fromList 最近我需要一个indexedFilter函数。这可以为您提供一个基于折叠的替代方案 indexedFil

在给定的
数组中删除索引
i
中的项的最优雅的方法是什么?在给定的
列表中

我能想到的最好的:

removeFromList i xs =
  (List.take i xs) ++ (List.drop (i+1) xs) 

removeFromArray i =
  Array.toList >> removeFromList i >> Array.fromList 

最近我需要一个
indexedFilter
函数。这可以为您提供一个基于折叠的替代方案

indexedFilter : (Int -> a -> Bool) -> List a -> List a
indexedFilter p xs =
    let
        tup = List.map2 (,) [ 0 .. List.length xs - 1 ] xs
    in List.foldr (\(i,x) acc -> if p i x then x :: acc else acc) [] tup

这是一种基于J的不同解决方案

用法:

[-1,2,0] `from` ["fran","world","san","hello"]
返回:
[只是“你好”,只是“桑”,只是“弗兰”]

定义,在
导入列表公开(..)
之后:


这应该相当有效:

remove : Int -> Array a -> Array a
remove i a =
  let
    a1 = Array.slice 0 i a
    a2 = Array.slice (i+1) (Array.length a) a
  in
    Array.append a1 a2

使用
List.Extra.removeAt
from.

现在,“elm社区/阵列额外”软件包提供以下功能:


被1分钟击败!也可以删除参数。列表的排序状态是无关的,因为问题与列表中的位置(索引)相关,而不是列表中元素的特征相关。它也可以是不可排序项目的列表。
remove : Int -> Array a -> Array a
remove i a =
  let
    a1 = Array.slice 0 i a
    a2 = Array.slice (i+1) (Array.length a) a
  in
    Array.append a1 a2