Haskellの特定のインデックスの要素を置き換える組み込み関数はありますか?
例:
replaceAtIndex(2,"foo",["bar","bar","bar"])
与えるべき:
["bar", "bar", "foo"]
自分で関数を作れることは知っていますが、組み込みのはずです。
特定のインデックスで要素を更新する必要がある場合、リストはそのための最も効率的なデータ構造ではありません。代わりにSeq
from Data.Sequence
の使用を検討することをお勧めします。その場合、探している関数は update :: Int -> a -> Seq a -> Seq a
です。 。
> import Data.Sequence
> update 2 "foo" $ fromList ["bar", "bar", "bar"]
fromList ["bar","bar","foo"]
私が知る限り(そして見つけることができる限り)、それはデフォルトでは存在しません。ただし、Data.List
にはsplitAt
が存在するため、次のようになります。
replaceAtIndex n item ls = a ++ (item:b) where (a, (_:b)) = splitAt n ls
これはO(N)ですが、これを頻繁に行う場合は、配列などの別のデータ型を調べてください。
実際の配列はありますが、リストは実際には単一リンクリストであり、要素を置き換えるという概念はそれほど明白ではありません(また、特定のインデックスの要素にアクセスすると、リストを使用すべきではないことが示される場合があるため、回避されます)。