2016-11-08 15 views
2

List[Map[String, String]]の要素をscalaでポップする最も効率的な方法を見つけようとしています。Popリストの最後の要素Scala

は、私が欲しいのはこのようなものです:

val last = myList.pop 

ここでは最後の最後の要素を持っている必要があります。myListとは、最後以外のすべてを持っている必要があります。

これは、lastとinitを使用して2つの操作で行うことができますが、2回の線形操作が必要です。どうすればこの問題を回避できますか?

+0

エレメントを交換して追加したり削除したりする必要がありますか?リストが空になるまで、 'list.pop'を実行しますか?使用パターンは、異なるアプローチをもたらすことができる。 – maasg

+3

なぜスタックを使用しないのですか?またはベクトルですか?リスト以外のものは、あなたが最後の要素を操作する必要があることを知っているときにリストを選ぶのは奇妙です。 –

答えて

-1
我々は同じ方法で作品を取る動作しますが、シーケンスの最後に始まり、シーケンスの末尾からの指定された数の要素を取って、前方に移動takeRight目的球を使用することができ

val last = mylist.takeRight(1) 

これをステートメントはあなたに最後の要素を与えます。

2

残りの要素を維持することは、リストを逆にすることである一方で、リストの最後の要素をポップするための効率的な方法は:

val last::rest = list.reverse 

これは逆に、リストの残りの部分を残しての効果があり、次のポップは次のとおりです:

val last2 :: rest2 = rest 

リストの他のすべての要素は安いO(1)です。リストが空の場合、この操作は失敗するので、それに応じて保護する必要があります。

しかし、用途によっては、他のデータ構造を検討する方が良いかもしれません。古典的なFILO構造はStackです。配列のような索引付け可能な構造体は、実装の基礎となることもあります。

関連する問題