如何"冻结"只是数组或字符串的一部分?

时间:2016-02-16 23:54:25

标签: ruby

我试图"冻结"只是字符串的第n个字符或数组的第n个索引。因此,当我进行更改时,它不会更改所选索引。 像" .freeze [i]"

这样的东西
  • 例子"冷冻"第一个字符或第一个索引。
  • 旋转方法也只是一个例子。一旦它不修改所选索引的位置和值,它就可以对数组进行任何修改。

    arr = ['a', 'b', 'c', 'd', 'e'].rotate
    # If we want index 0 to be "frozen":
    ['a', 'c', 'd', 'e', 'b']
    

    str = 'abcde'.rotate
    # If we want range index 0..2 to be "frozen":
    'abced'
    

非常感谢任何有关如何操作的想法!

聚苯乙烯。 我知道冻结方法与我想要实现的目标无关(冻结这里是一个词,而不是一个方法)。 虽然这是我能做的最好的事情,让它易于理解,并且很容易被整个社区的其他人找到。

感谢所有人帮助并使这个社区成为一个伟大的社区! 我承诺尽我所能,帮助大家回来! :)

3 个答案:

答案 0 :(得分:2)

仅仅因为字符串被冻结并不意味着它不能被移动到数组中的其他位置。冻结对象只会阻止对象本身被修改。

我要做的是取出你不想移动的元素,旋转数组,然后在旋转后将它放回到相同的索引处,如下所示:

arr = ['a', 'b', 'c', 'd', 'e']
index = 0
item = arr.delete_at(index)
arr.rotate!
arr.insert(index, item)

之后,arr将为["a", "c", "d", "e", "b"]

答案 1 :(得分:0)

您无法冻结字符串的一部分。同样,您无法冻结数组的特定索引。您可以冻结数组中特定项的值,因为数组本质上是值的集合。

array = []
array[] << "value".freeze
array[0] # is frozen

但是,你要冻结数组中第0位的值,而不是位置本身。

答案 2 :(得分:0)

这是一种适合您尝试的方法。你不是用Ruby术语来冻结索引,但是这个方法将保存对象的位置。

webkit.net

这将返回[“a”,“b”,“c”,“e”,“d”]