這篇先解題分享。怕來不及打完,這樣比較好修改...科科
題目連結:https://leetcode.com/problems/remove-duplicates-from-sorted-array
重點在於,不產生新陣列,由陣列直接刪除重複數字,且例子有數字連續特性。
# @param {Integer[]} nums
# @return {Integer}
def remove_duplicates(nums)
end
def remove_duplicates(nums)
#去除陣列中重複的數字,只保留單獨一個
#回傳新陣列的數值是題目要求的。
end
解題方向也可以用for、while、loop等語法。
def remove_duplicates(nums)
nums.uniq!
nums.size
end
有夠黑...
題目連結:https://leetcode.com/problems/remove-element/
直接由陣列,去除陣列指定數值。
# @param {Integer[]} nums
# @param {Integer} val
# @return {Integer}
def remove_element(nums, val)
#刪除陣列內指定值
#回傳陣列長度(資料數)
end
#重點在於,不能用多一個array去運算,例如
nums - [val]
2.7.3 :063 > x = [1, 2, 4, 5]
=> [1, 2, 4, 5]
2.7.3 :064 > y = [2]
=> [2]
2.7.3 :065 > x-y
=> [1, 4, 5]
這邊也先直接黑魔法下去。
def remove_element(nums, val)
nums.delete(val)
return nums.size
end
這兩題擺在一起,其實是因為有相同邏輯可以去用,什麼指針式,雙指針。
Ruby的優點在於很多語法對於資料(陣列,雜湊),處理得非常完善,這些語法當然也是由許多邏輯經過良好的封裝完成的。
有人說新手學Ruby很難,因為太多黑魔法,這點真的無法否認。像我這個菜鳥,學習初期真的很想了解這些黑魔法的運作原理,但CP值真的太低了,學怎麼用比較實在,但是邏輯能懂還是要能懂,在遇到沒有黑魔法時,才解得出來。
實體就是一堆資料的集合體,通常招喚一個實體,會看到的是一雜湊。
首先Rails new一個專案,之後我們直接先做一個modle與一個controller
請確定終端機指令介面有到正確的資料夾。
$rails new test1212
test1212是專案名稱,專案名稱請隨意。
但注意專案名稱盡量不要取得與未來你會用到的model、controller、table名稱相同。
$ rails greate model model_name
我model_name用role,應該會看到類似資料回傳.
Running via Spring preloader in process 85403
invoke active_record
create db/migrate/20210811102936_create_roles.rb
create app/models/role.rb
invoke test_unit
create test/models/role_test.rb
create test/fixtures/roles.yml
create部分告知你創建了哪些資料,可以先停下看看資料夾多了哪些檔案,test部分請先跳過。
這是用指令方式創建,也可以手動輸入。(test很重要,重要到我不會XD)
有model不一定會有資料表(不一定有實體),也有可能一個model會有許多張資料表。
接著我們先執行做出資料庫
$ rails db:migrate
== 20210811102936 CreateRoles: migrating ======================================
-- create_table(:roles)
-> 0.0012s
== 20210811102936 CreateRoles: migrated (0.0012s) =============================
這代表著我們開始可以將由Role這個model建立出來的實體有地方放了。
migration這項,及使用rails greate model或rails greate model指令帶參數時的注意事項不做分享,請看好書為你自己學Ruby on Rails
但請注意,一般用指令時,g model會順便建立table,g migration不會順便建立model。
接下來另一個指令
$ rails c
$ rails c --sandbox
不講專有名詞,就是rails的irb,sanbox指沙盒模式,隨你玩,不會真的存檔。
進入後
2.7.3 :001 > player = Role.new
(0.9ms) SELECT sqlite_version(*)
TRANSACTION (0.1ms) begin transaction
=> #<Role id: nil, created_at: nil, updated_at: nil>
2.7.3 :002 > player = Role.create
TRANSACTION (0.2ms) SAVEPOINT active_record_1
Role Create (1.2ms) INSERT INTO "roles" ("created_at", "updated_at") VALUES (?, ?) [["created_at", "2021-08-11 13:04:04.122577"], ["updated_at", "2021-08-11 13:04:04.122577"]]
TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1
=> #<Role id: 3, created_at: "2021-08-11 13:04:04.122577000 +0000", updated_at: "2021-08...
你的畫面可能跟我長得不一樣,但請觀察new與create這兩個指令的差異。
為何書上都有的,我還這樣打一遍,因為我初學時,rails c跟irb傻傻分不清楚,還有以為rails後一定也要建立controller與view才可以建立實體。
整理一下Role.create出來的實體
player = {
id: 3,
create_at: "2021-08-11 13:04:04.122577000 +0000",
updated_at: "2021-08-11 13:04:04.122577"
}
實體其實就是一堆資料,電腦傳輸的是一堆資料。
下篇繼續說明:怎麼用人看得懂的方式處理實體。(講完等於講完MVC了?)
網路上的好資料:Rails指令集