1. ホーム
  2. string

[解決済み] 文字列の先頭文字の取得と削除

2022-08-15 13:32:52

質問

文字列を使って、各文字に異なる値を割り当てて2次元のウォークを行いたいと思っています。 私は、文字列の最初の文字を「ポップ」して、それを使用し、残りの文字列について繰り返すことを計画していました。

どうすればこのようなことを実現できるのでしょうか?

x <- 'hello stackoverflow'

こんなことができるようになりたいです。

a <- x.pop[1]

print(a)

'h'
print(x)

'ello stackoverflow'

どのように解決するのですか?

参照 ?substring .

x <- 'hello stackoverflow'
substring(x, 1, 1)
## [1] "h"
substring(x, 2)
## [1] "ello stackoverflow"


を持つということは pop に格納されているデータを更新する副作用があります。 x は、まさにオブジェクト指向プログラミングの概念です。 ですから pop 関数を定義するのではなく、文字ベクトルを操作するために 参照クラス を使って pop メソッドで指定します。

PopStringFactory <- setRefClass(
  "PopString",
  fields = list(
    x = "character"  
  ),
  methods = list(
    initialize = function(x)
    {
      x <<- x
    },
    pop = function(n = 1)
    {
      if(nchar(x) == 0)
      {
        warning("Nothing to pop.")
        return("")
      }
      first <- substring(x, 1, n)
      x <<- substring(x, n + 1)
      first
    }
  )
)

x <- PopStringFactory$new("hello stackoverflow")
x
## Reference class object of class "PopString"
## Field "x":
## [1] "hello stackoverflow"
replicate(nchar(x$x), x$pop())
## [1] "h" "e" "l" "l" "o" " " "s" "t" "a" "c" "k" "o" "v" "e" "r" "f" "l" "o" "w"