え~PhotoShopってかなり出来る子なんで、選択して移動とかするときグリッドや画像の端っことかにかってに張り付いてくれますよね、でもね
「よけーなことすんじゃねぇ」って思うときがたまにあるんですよね、
こう、マウステクを駆使してちょっとだけ、ほんの1pxだけとか移動したいのにグイってなっちゃうんですよね。そんなときは
上段メニューの[ビュー]にある[スナップ]のチェックをハズします。(photshop 6.0の場合)
これです。
これで移動とかするときスナップされなくなって微調整ができます。
2010年7月24日土曜日
order byで激はまり
今日はクエリのorder byで激はまりしました
SQL SERVERだったんですけど
id | no | num |
---|---|---|
1 | 2 | 100 |
2 | 1 | 200 |
3 | NULL | 300 |
4 | NULL | 400 |
id | no | num |
---|---|---|
3 | NULL | 300 |
4 | NULL | 400 |
2 | 1 | 200 |
1 | 2 | 100 |
- noがNULLである行が最優先
- noがNULL以外の中でnumの値を降順でソートする
order byするときに複数のカラムを同時に見てソートするって出来るんでしょうかね?
で、苦労の末に出来上がったクエリがこれです。
select * from hoge order by no / no * num * -1;
2010年7月23日金曜日
2010年7月21日水曜日
あまりやりたくない、憂鬱な仕事をこなすにはどうするか?
やりたくない仕事だからってやらないといけないわけで・・・
退屈な仕事でもやらないと終わらないわけで・・・
終わりそうもない仕事でもやらないと終わらないわけで・・・
そんなときやる気を出すための方法をいくつか列挙してみる
退屈な仕事でもやらないと終わらないわけで・・・
終わりそうもない仕事でもやらないと終わらないわけで・・・
そんなときやる気を出すための方法をいくつか列挙してみる
- 目標をつくってみる
- ご褒美を用意してみる
- その仕事をやってなにか得るものはないかと考えてみる
- 仕事が楽しくなる方法は無いかと考えてみる
- とりあえず楽しいことを考えてみる
- 誰かと競争してみる
- わくわくするような何かを探してみる
- 誰かの為にがんばってみる
- 自分の為にがんばってみる
- 自分を褒めてみる
C++プログラマがLuaを勉強してみる第14回
テーブルは常に参照型です(キリッ
数値は参照型ではありません。
文字列は参照型かもしれませんが文字列を直接編集する事はできないので特に意識する事は無いと思います。
数値は参照型ではありません。
文字列は参照型かもしれませんが文字列を直接編集する事はできないので特に意識する事は無いと思います。
2010年7月20日火曜日
C++プログラマがLuaを勉強してみる第13回
◆C/C++からLuaを呼び出すためのライブラリをコンパイルしてみる
さて、今回はLua5.1.4とVisual Studio 2008を使ってライブラリをコンパイルしてみます。 STEP 1:ソースをダウンロード
まずはここからソースをダウンロードして解凍します。STEP 2:Visual Studio 2008でプロジェクト作成
VC++でWin32プロジェクトを作成します。
次にアプリケーションの設定をスタティックライブラリに設定します。
完了します。
STEP 3:srcの取り込み
ダウンロードしたlua-5.1.4.tar.gzを解凍してsrcフォルダSTEP 2で作成したプロジェクトの有るフォルダにコピーします。
srcフォルダ内の.cファイルと.hファイルをプロジェクトに取り込みます。
このとき下記のファイルは必要有りません。
- lua.c
- luac.c
- print.c
STEP 4:プロジェクトの設定
プリプロセッサの定義に_CRT_SECURE_NO_DEPRECATEを追加します。えーっとプロジェクトの設定とかあまり詳しくないので過不足あったらすいません。
STEP 4:ビルド
2010年7月19日月曜日
C++プログラマがLuaを勉強してみる第12回
◆C/C++からLuaを実行する
C++からLuaのコードを実行するサンプルをつくりました。C++からLuaのコードを実行するためのライブラリ(lib)のコンパイルは後日紹介します。
extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } int main(int argc, char* argv[]) { // LuaのVMを生成 lua_State *const L = lua_open(); // Luaの標準ライブラリを開く luaL_openlibs(L); while (true) { // luaファイルを指定して実行する if (luaL_dofile(L, "test.lua")) { // エラー内容の取得 printf("error:%s\n", lua_tostring(L, -1)); lua_pop(L, 1); return 0; } // 直接コードを指定する if (luaL_dostring(L, "print('hello lua world')")) { // エラー内容の取得 printf("error:%s\n", lua_tostring(L, -1)); lua_pop(L, 1); return 0; } printf("\n"); printf("hit any key...\n"); printf("0 is exit\n"); const char c = getchar(); if (c == '0') { break; } } // LuaのVMを閉じる lua_close(L); return 0; }getchar()のところでtest.luaを編集ご実行すると編集内容が反映されます。
2010年7月18日日曜日
LIBCMT.libとMSVCRTD.libの競合
Luaのライブラリを利用しようとしたら出たエラーです。
ライブラリ(lib)がVC2005でコンパイルされていたので
VC2008のReleaseモードでコンパイルしたらでなくなりました。
LIBCMT.lib(_file.obj) : error LNK2005: ___iob_func は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup は既に MSVCRTD.lib(crtexe.obj) で定義されています。
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __lock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(dosmap.obj) : error LNK2005: __errno は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(lconv.obj) : error LNK2005: _localeconv は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(atox.obj) : error LNK2005: _atoi は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(strtol.obj) : error LNK2005: _strtoul は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
ライブラリ(lib)がVC2005でコンパイルされていたので
VC2008のReleaseモードでコンパイルしたらでなくなりました。
LIBCMT.lib(_file.obj) : error LNK2005: ___iob_func は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup は既に MSVCRTD.lib(crtexe.obj) で定義されています。
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(mlock.obj) : error LNK2005: __lock は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(dosmap.obj) : error LNK2005: __errno は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(lconv.obj) : error LNK2005: _localeconv は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(atox.obj) : error LNK2005: _atoi は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMT.lib(strtol.obj) : error LNK2005: _strtoul は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
2010年7月17日土曜日
相手の意見を頭ごなしに否定しない
誰しも有ると思いますが、相手よりも優位に立ちたい、自分の評価を上げたい等の心理からついつい相手の意見を否定したり、あらを探したりしてしまいがちですがそれだと仕事、人間関係ともにうまくいかない場合が多いのではないでしょうか?
そこで、相手の意見は出来るだけ否定せずに意見をよく理解してメリットデメリットを述べ、その上で自分の持っている意見を提示するのが良いのではないでしょうか。
そこで、相手の意見は出来るだけ否定せずに意見をよく理解してメリットデメリットを述べ、その上で自分の持っている意見を提示するのが良いのではないでしょうか。
2010年7月16日金曜日
PHPのforeachで$valueを参照型にする
PHP5以降foreachの$valueを参照型にすることができるんですね、今日知りました。
参照型にすると次のようなメリットがありますね
簡単なコード例を用意しました。
参照型にすると次のようなメリットがありますね
- コピー処理が実行されないのでループ処理が速くなる
- 配列内の各要素に処理をするのが楽
- 参照であるがゆえにプログラマが意図しない処理となってしまう場合がある
簡単なコード例を用意しました。
$num_array = array(1,2,3,4,5); foreach ($num_array as &$value) { $num += 1; } unset($value); print_r($num_array);
2010年7月14日水曜日
2010年7月13日火曜日
SQL Serverでハイフンを含んだ文字列のソートが変
なんか、SQL Serverでハイフンを含んだ文字列のソートがうまくいかなくて困ったんですけど
って並んでほしぃのに
って並んでしまうんです。
んでいろいろ調べてみたんですがSELECTするときに「COLLATE Japanese_BIN」をつけるとうまくいきました。
select * from aaa order by name COLLATE Japanese_BIN
こんな感じです
A-10
A-30
A20
って並んでほしぃのに
A-10
A20
A-30
って並んでしまうんです。
んでいろいろ調べてみたんですがSELECTするときに「COLLATE Japanese_BIN」をつけるとうまくいきました。
select * from aaa order by name COLLATE Japanese_BIN
こんな感じです
EXCELで重複する行(レコード)を非表示にする
EXCELで重複する行(レコード)を非表示にするには
1.列を選択する
2.メニュー[データ]→[フィルタ]→[フィルタオプションの設定]を起動する
3.「重複するレコードは無視する」にチェックを入れる
でOK
1.列を選択する
2.メニュー[データ]→[フィルタ]→[フィルタオプションの設定]を起動する
3.「重複するレコードは無視する」にチェックを入れる
でOK
2010年7月12日月曜日
EXCELで奇数の行だけ色をかえる
EXCELで奇数の行だけセルの色を変更するには
- 適用するセル範囲を選択する
- メニューから「条件付き書式の設定」を起動する
- 「数式が」を選し「=MOD(ROW(),2)=1」を入力する
- 書式を設定する
2010年7月11日日曜日
PHPで32bitを超える数値を扱う場合の注意点
今日しごとで出た問題なんですけど、PHPのintval()って環境に関係なく32bitで丸められるみたいなんですよね。
下記のコードを実行してみてください
正しく表示されてたらすいません。
未確認ですが、intval()だけじゃなくてsprintf()などの%dも同様の問題が有るみたいです。、
下記のコードを実行してみてください
$a = 123456789; $b = $a * 100; print_r($b); print_r(intval($b))
正しく表示されてたらすいません。
未確認ですが、intval()だけじゃなくてsprintf()などの%dも同様の問題が有るみたいです。、
2010年7月10日土曜日
C++プログラマがLuaを勉強してみる第11回
◆コルーチンによるタイマスレッドみたいなの
を作ってみました。で、こんなの使うのだろうか。。。よくわかりませんw
isTimeout = false --タイムアウトハンドラ function timeOutHandler(_limit) isTimeout = true end --タイマコルーチン用関数 function timer(_limit, callBack) local limit = _limit --リミット local startTime = os.time() --開始時間 local latest = os.time() --前回の時間 local countDown = _limit --カウントダウン用 print(countDown) while true do local time = os.time() if startTime + limit <= os.time() then break elseif latest < time then print(coroutine.status(co)) latest = time countDown = countDown - 1 print(countDown) end coroutine.yield() --コルーチンを中断して処理をもどす end callBack(limit) --コールバック関数を呼ぶ end co = coroutine.create(timer) --コルーチンの生成 print(coroutine.status(co)) --ステータスの表示 --メインループ repeat coroutine.resume(co, 10, timeOutHandler) --コルーチンの開始と再開 until isTimeout print(coroutine.status(co)) print("time out")
2010年7月9日金曜日
C++プログラマがLuaを勉強してみる第10回
◆Luaでテンプレートメソッドパターン
今回はLua初心者のくせにテンプレートメソッドパターンに挑戦してしまいました。テンプレートメソッドパターンについてはここ参照
無理矢理感が否めないので、ぜんぜんちっげーよ!ってコメント待ってます!
まずは、簡単にクラス図の説明を書きます。
なんかどっかでみたよーな命名ですが気にしない気にしない
CaffeineBeverageクラス(Superクラス)
△
|
----------------
| |
Coffeeクラス Teaクラス
以下ソースコード
CaffeineBeverage.lua
---------------------------------------- --CaffeineBeverageクラス ---------------------------------------- CaffeineBeverage = {} -- new function CaffeineBeverage:new(_caffeineBeverage) local obj = {} -- field if _caffeineBeverage then obj.name = _caffeineBeverage.name else obj.name = "" end self.__index = self setmetatable(obj, self) return obj end -- property function CaffeineBeverage:set(_name) self.name = _name end -- __tostring over ride function CaffeineBeverage:__tostring() return "name:"..self.name end -- clone function CaffeineBeverage:clone() return CaffeineBeverage:new(self) end -- prepareRecipe function CaffeineBeverage:prepareRecipe() CaffeineBeverage:boilWater() CaffeineBeverage:brew() CaffeineBeverage:pourInCup() CaffeineBeverage:addCondiments() end -- boilWater function CaffeineBeverage:boilWater() print("お湯を沸かす。。。") end -- brew() function CaffeineBeverage:brew() error("have to override") end -- pourInCup function CaffeineBeverage:pourInCup() print("カップに注ぐ。。。") end -- addCondiments function CaffeineBeverage:addCondiments() error("have to override") end
Coffee.lua
dofile("CaffeineBeverage.lua") -- C/C++で言うところの#include ---------------------------------------- --Coffeeクラス ---------------------------------------- Coffee = {} -- new function Coffee:new(_coffee) obj = {} -- field if _coffee then obj = CaffeineBeverage:new(_coffee) else obj = CaffeineBeverage:new() end -- clone (override) obj.__index.brew = function() return Coffee:new(self) end -- brew (overrice) obj.__index.brew = function() print("コーヒーをドリップする") end -- addCondiments (override) obj.__index.addCondiments = function() print("砂糖とクリープを加える") end return obj end
Tea.lua
dofile("CaffeineBeverage.lua") ---------------------------------------- --Teaクラス ---------------------------------------- Tea = {} -- new function Tea:new(_tea) obj = {} -- field if _tea then obj = CaffeineBeverage:new(_tea) else obj = CaffeineBeverage:new() end -- clone obj.__index.brew = function() return Tea:new(self) end -- brew obj.__index.brew = function() print("ティーバッグをお湯に浸す") end -- addCondiments obj.__index.addCondiments = function() print("砂糖とレモン") end return obj end
main.lua
dofile("Coffee.lua") dofile("Tea.lua") ---------------------------------------- -- main ---------------------------------------- function main() print("--コーヒーの生成") a = Coffee:new() a:set("コーヒー") print(a) a:prepareRecipe() print("\n") print("--紅茶の生成") b = Tea:new() b:set("紅茶") print(b) b:prepareRecipe() print("\n") print("--コピーコンストラクタの使用") c = Tea:new(b) print(c) c:set("レモンティ") print(c) print(b) print("\n") print("クローン") d = c:clone() print(d) d:set("レモンの紅茶") print(d) print(c) end -- call main -- try catchみたいなの使ってます。 -- error()ってメソッドがthrowに相当します。 local status, err = pcall(main) if status then -- do nothing else print(err) end
2010年7月8日木曜日
C++プログラマがLuaを勉強してみる第9回
◆関数定義時のピリオド「.」とコロン「:」の違い
コロンで定義した場合はselfが使用できますピリオドで定義した場合は引数にself(C++でいうところのthis)を取るとselfに自信が代入されます
test = { name = "yamada" } -- コロン function test:printName() print(self.name) -- selfにtestが入っている end -- ピリオドでselfの引数をもつ function test.printName2(self) print(self.name) -- selfにtestが入っている end -- ピリオドでselfなし function test.printName3() -- print(self.name) -- selfは使用できない print("yamada") end
2010年7月7日水曜日
C++プログラマがLuaを勉強してみる第8回
◆クラス
--------------------------------------- --Characterクラスの定義 --------------------------------------- Character = {} --Characterクラス --newメソッド function Character:new(_character) obj = {} --メンバ変数の定義と初期化 if _character then --コピーコンストラクタ的な処理 obj.name = _character.name obj.age = _character.age else --デフォルトコンストラクタ適な処理 obj.name = "" obj.age = 0 end --Characterのメソッドをobjに設定 --継承みたいな感じ self.__index = self setmetatable(obj, self) return obj end --setメソッド function Character:set(_name, _age) self.name = _name self.age = _age end --__tostringメタメソッドのオーバーライド function Character:__tostring() return "name:"..self.name.."\n".."age:"..self.age end --cloneメソッド function Character:clone() return Character:new(self) end ---------------------------------------- --クラスの使用 ---------------------------------------- c = Character:new() --オブジェクトの生成 c:set("suzuki", 12) --データの設定 d = Character:new(c) --コピーコンストラクタの使用 print("--c--") print(c) print("--d--") print(d) print("\n") c:set("suzuki_2", 24) d:set("yamada", 55) print("==c==") print(c) print("==d==") print(d) print("\n") e = d:clone() d:set("takeda", 77) print("##d##") print(d) print("##e##") print(e)
2010年7月6日火曜日
C++プログラマがLuaを勉強してみる第7回
◆関数
--基本 function f(_arg) print(_arg) end f("Hello World") f2 = function() print("Hello World2") end f2() --数の合わない引数 function fu(_arg1, _arg2) print("_arg1:", _arg1) print("_arg2:", _arg2) end fu("Hello") fu("Hello", "World") fu("Hello", "World", "Hi") --可変長引数 function fun(...) args = {...} for index, value in ipairs(args) do print(index, ":", value) end end fun("Hello", "World")
2010年7月5日月曜日
C++プログラマがLuaを勉強してみる第6回
◆制御構文
fouループ
for i = 1, 10 do print(i) end
whileループ
while true do str = io.read() if str == "exit" then break else print(str) end end
repeatループ
repeat i = i + 1 print(i) until 5 < i
if分岐
a = io.read() if a == 1 then a = a + 10 print(a) elseif a == 2 then a = a + 20 print(a) else print(a) end
2010年7月4日日曜日
出した指示を相手が把握しているか確認する
「逆に私に作業指示をだしてください」
「これからの作業について説明してください」部下や同僚に作業指示を出した後、相手が把握しているかを確認するとき
「把握しましたか?」
「わかりましたか?」
「できますか?」
とついつい聞いてしまいがちですが、この確認の仕方だと相手は把握していてもしていなくても
「はい、大丈夫です」
のような「yes」の返事がほとんどだと思います。
これだと、相手が把握していなかった場合工数が無駄になってしまいます。
そこで、
「逆に私に作業指示をだしてください」
「これからの作業について説明してください」という聴き方で相手が作業内容を把握しているか確認します。
この方法によって指示をもらった人自身が、自分が把握している部分、していない部分を明確にすることができますし、指示を出した方も作業内容を再度確認することが出来ます。
2010年7月3日土曜日
C++プログラマがLuaを勉強してみる第5回
◆連装配列
生成
t = {}t = {["name"] = "apple", ["class"] = "mage", ["job"] = "blacksmith"}
t = {name = "apple", class = "mage", job = "blacksmith"}
追加
t = {}t.name = "apple"
t.class = "mage"
t.job = "blacksmith"
削除
t.name = nil反復(なめる)
for key, value in pairs(t) doprint(value)
end
2010年7月2日金曜日
C++プログラマがLuaを勉強してみる第4回
◆配列
生成
t = {}
t = {"apple", "orange", "banana"}
追加
t[1] = "apple"
t[2] = "orange"
t[3] = "banana"
※Luaの添え字は「1」から始まります。
末尾に追加(push)
table.insert(t, "apple")
table.insert(t, "orange")
table.insert(t, "milk")
挿入
table.insert(t, 1, "apple")
table.insert(t, 2, "orange")
table.insert(t, 3, "orange")
削除
table.remove(t, index)
末尾から削除(pop)
table.remove(t)
サイズ(アイテム数)を取得する
#t
table.getn(t)
区切り文字で連結
table.concat(t) --> appleorangebananatable.concat(t, ",") --> apple,orange,banana
table.concat(t, ",", 2, 3) --> orange,banana
ソート
function s(_a, _b)
return _a < _b
end
table.sort(t, s)
反復(なめる)
t = { "apple", "orange", "banana"}
for index, value ipairs(t) do
print(value)
end
for i = 1, #t do
print(t[i])
end
登録:
投稿 (Atom)