ruby:ハッシュ操作の基本

ハッシュの基本操作。

>> seeds = {"unk"=>0, "par"=>3, "rog"=>1}
=> {"unk"=>0, "par"=>3, "rog"=>1}
>> seeds["par"]
=> 3

>> seeds_s = {unk: 0, par: 3, rog: 1}                                                                           
=> {:unk=>0, :par=>3, :rog=>1}
>> seeds_s[:par]
=> 3

>> a = seeds_s.fetch(:par)
=> 3
>> a = seeds_s.fetch(:zwo)                                                                                      
Traceback (most recent call last):
        1: from (irb):83:in `fetch`
KeyError (key not found: :zwo)
# 存在しないキー指定するとエラー

>> seeds_s.store(:zwo, 2)                                                                                       
=> 2
>> seeds_s
=> {:unk=>0, :par=>3, :rog=>1, :zwo=>2}
>> seeds_s.size
=> 4

# keyの存在判定
>> seeds_s.include?(:super)
=> false
>> seeds_s.include?(:zwo)
=> true

keyを変数から設定。

>> seeds_s = {unk: 0, par: 3, rog: 1}
=> {:unk=>0, :par=>3, :rog=>1}
>> a = "zog"
=> "zog"

>> seeds_s.store(a.to_s, 9)
=> 9
>> seeds_s
=> {:unk=>0, :par=>3, :rog=>1, "zog"=>9}

イテレータの操作。

# イテレータ(繰り返しメソッド)
>> seeds_s.each {|s| puts s}
unk
0
par
3
rog
1
zwo
2
=> {:unk=>0, :par=>3, :rog=>1, :zwo=>2}
>> seeds_s.each {|key,value| puts key.to_s + ":"+ value.to_s}                                                   
unk:0
par:3
rog:1
zwo:2
=> {:unk=>0, :par=>3, :rog=>1, :zwo=>2}
# each_key, each_valueでキーのみ、値のみの取得も可能

# 配列に変換
>> seeds_a = seeds_s.map {|k,v| [k,v]}
=> [[:unk, 0], [:par, 3], [:rog, 1], [:zwo, 2]]
>> seeds_a[0]
=> [:unk, 0]

>> seeds_a = seeds_s.map {|k,v| {k.to_sym=>v}}
=> [{:unk=>0}, {:par=>3}, {:rog=>1}, {:zwo=>2}]
>> seeds_a[0]
=> {:unk=>0}
>> seeds_a[0][:unk]
=> 0

その他。

# デフォルト指定(未登録キー指定時の返却)
>> z = Hash.new("default")
=> {}
>> z
=> {}
>> z[:key]
=> "default"

ruby:配列(Array)操作の基本

配列の基本操作。

>> names = ['Luf','Zor','Nam']                                                                                  
=> ["Luf", "Zor", "Nam"]
>> names[0]
=> "Luf"
>> names.size
=> 3
>> names[4] = 'Uso'
=> "Uso"
>> names
=> ["Luf", "Zor", "Nam", nil, "Uso"]
>> names.push('San')
=> ["Luf", "Zor", "Nam", nil, "Uso", "San"]

イテレータを使用した操作。

# イテレータ(繰り返しメソッド)
>> names.each do |n|
?>   puts n
>> end
Luf
Zor
Nam

Uso
=> ["Luf", "Zor", "Nam", nil, "Uso", "San"]


# 別の配列にセット
# conpact:nilを取り除く
>> names_a = names.map {|n| n}.compact
=> ["Luf", "Zor", "Nam", "Uso", "San"]
>> names_a
=> ["Luf", "Zor", "Nam", "Uso", "San"]
>> names
=> ["Luf", "Zor", "Nam", nil, "Uso", "San"]


# eachで埋め返す場合は手間がかかるのでmap推奨
>> names_b = []
=> []
>> names.each {|n| names_b << n}
=> ["Luf", "Zor", "Nam", nil, "Uso", "San"]
>> names_b
=> ["Luf", "Zor", "Nam", nil, "Uso", "San"]


# each_with_index
>> names.each_with_index {|n, i| puts n + ':' + i.to_s if n.present? }
Luf:0
Zor:1
Nam:2
Uso:4
San:5
=> ["Luf", "Zor", "Nam", nil, "Uso", "San"]


# select ブロックで評価した値が真だった要素を全て含む配列を返す
>> names_a.select {|n| n.include?("a")}                                                                         
=> ["Nam", "San"]

文字列からの配列作成。

# 文字列から配列作成
>> sea = %w[east west center]
=> ["east", "west", "center"]

# 文字列から配列作成(symbolとして作成)
>> sea = %i[east west center]
=> [:east, :west, :center]

rails:検索時にリテラルのselect句やjoin句を使う

一般的だと思うけど、覚書。

controllerではモデルのリテラルを指定して検索。

controller/tallent_controller.rb

class TallentController  < ApplicationController
  def index
    @tallents = Tallent.select(Tallent::SELECT_STR)
      .joins(Tallent::JOIN_STR)
      .order(name: 'asc')
  end
end

モデル側に、select句やjoin句のリテラルを定義しておく。 (記述する場所はモデルでなくてもよい)

model/tallent.rb

class Tallent < ApplicationRecord
  SELECT_STR = "
    tallents.id AS tallent_id,
    tallents.name AS tallent_name,
    pirates_corps.name AS pirates_corps_name
  "
  JOIN_STR = "
    LEFT OUTER JOIN
      pirates_corps
    ON
      tallents.pirate_corp_id = pirates_corps.id
  "
end

Markdown:記法メモ


特殊文字をそのまま表示

バックスラッシュでエスケープします。

\```

```

コード(pre記法)

  • 整形済みテキストの記法
  • HTMLの<pre>タグに相当
  • 行頭に4つ以上の半角スペースか1つ以上のタブをつける
  • もしくは、段落の前後に「```」ではじまる行をつける
  • 「```ruby」のように、書式指定可能

```
hello ruby
```

hello ruby

```ruby
def index
array.each do |a|
puts a
end
end
```

def index  
  array.each do |a|  
    puts a  
  end  
end  

インラインコード

ここでは`hello ruby`のように記載する

ここではhello rubyのように記載する

見出し

# 見出し 
## 見出し
### 見出し
#### 見出し
##### 見出し
###### 見出し

見出し

見出し

見出し

見出し

見出し
見出し

引用

> 引用です
>
>> ネスト
>

引用です

ネスト

改行

改行したい場所[半角スペース][半角スペース]or<br> 


|指定無し|左寄せ|中央寄せ|右寄せ|
|--------|:-----|:------:|-----:|
|100     |200   |300     |400   | 
指定無し 左寄せ 中央寄せ 右寄せ
100 200 300 400

git:ローカルブランチのリセット

ローカルブランチの状態がおかしくなっており(コンフリクトだらけ)、
リモートの状態を正として上書き更新したい場合、以下コマンドを使用

$ git fetch origin
$ git reset --hard origin/master

masterがブランチ名
ブランチ名に/があっても、そのまま記述OK

origin/feature/task01

git の HEAD とは何かを理解要

  • 現在いるブランチの最新の変更点のポインタ
  • 今HEADがあるブランチのみ、新たな変更保存(commit)できる

以下サイトがわかりやすい
Git入門初心者向け - ネビ活 | ネットビジネス生活


※追記
git pull して大量コンフリクトが発生したケース

以下のブランチにいる状態
feature/202301

新しいブランチを取得しようとして以下
git pull origin feature/202302:feature/202302

大量のコンフリクトが表示された

以下コマンドでカレントのブランチの状態を元に戻す

$ git fetch origin
$ git reset --hard origin/feature/202301

以下コマンドで新ブランチに移動
git checkout feature/202302

念のため最新取得(おそらく最新状態)
git pull origin feature/202302