陣列與字串轉換的方法

許多程式都會想要節省一些資料庫的結構,通常都會用某值代表某狀態。如果經過應用功能的設定就要取代這字串當中的某值,所以要取其中的值來取代。

如果我在資料庫中有某個值是這樣:

101010

該如何將第三位數予以取代成這樣:

103010

以irb溝通範例如下:
[cc lang=”ruby”]
$ irb
ree-1.8.7-2011.03 :001 > val=101010;
ree-1.8.7-2011.03 :002 > str=val.to_s
=> “101010”
ree-1.8.7-2011.03 :003 > arr=str.split(//)
=> [“1”, “0”, “1”, “0”, “1”, “0”]
ree-1.8.7-2011.03 :004 > arr[2]=”3″
=> “3”
ree-1.8.7-2011.03 :005 > arr
=> [“1”, “0”, “3”, “0”, “1”, “0”]
ree-1.8.7-2011.03 :006 > str2=arr.join
=> “103010”
[/cc]

步驟說明:
取出某值Ruby會當做int型別。
用 to_s 函數變成String型別。
用split(//)轉成陣列。
然後在第三位數取換某值如:arr[2]=”3″,記得 3 要是字串型別。
最後用 join 函數從陣列組合成字串

以上做法可以不用code block 以節省程式碼,好看又不跳針~

由一串「數字」轉換「字串」的方法

在 Ruby 中因為可以不用優先宣告資料型態,所以時常會讓程式搞不清楚哪些該是 String 與 Integer ,因此 Ruby 提供 to_s() 這個函數以供轉換。

狀況如下:
[cc lang=”ruby”]
$ irb
ree-1.8.7-2011.03 :001 > myval=101010;
ree-1.8.7-2011.03 :002 > myval[0]
=> 0
ree-1.8.7-2011.03 :003 > myval[0,1]
ArgumentError: wrong number of arguments (2 for 1)
from (irb):5:in `[]’
from (irb):5
from :0
[/cc]

由於要取其中的字串是要用於 String 的類型才能讓 Ruby 正確取得該值。然而我想要做的是我要把這一串數值依照我要的位置取得正確的值,比如說第一位數的 1 與 0 代表 A 功能項目的權限,第二位數代表 B 功能的權限。

使用 to_s 解決方案如下:
[cc lang=”ruby”]
ree-1.8.7-2011.03 :001 > myval=101010;
ree-1.8.7-2011.03 :002 > myval.to_s[0,1]
=> “1”
ree-1.8.7-2011.03 :003 > myval.to_s[1,1]
=> “0”
ree-1.8.7-2011.03 :004 > myval.to_s[2,1]
=> “1”
ree-1.8.7-2011.03 :005 > myval.to_s[3,1]
=> “0”
ree-1.8.7-2011.03 :006 > myval.to_s[4,1]
=> “1”
ree-1.8.7-2011.03 :007 > myval.to_s[5,1]
=> “0”
ree-1.8.7-2011.03 :008 > myval.to_s[0,6]
=> “101010”
[/cc]

因此就可以當作字串來依序取單一值了。