“Luaで数値を用いたfor文でループ処理を行う” では数値を用いたfor
文を扱ったが、ここでは汎用のfor
文を用いて配列(としてのテーブル)の各要素に対するループ処理を行う。
for [番号の変数], [要素の変数] in ipairs([配列としてのテーブル]) do
-- 処理...
end
for
の後ろには2つの変数名をコンマ区切りで記述し
としてdo
とend
の間で参照できる。下は簡単な例。
$ lua -e "mon = {'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'}; for i, m in ipairs(mon) do print(('%s は %2d月'):format(m, i)) end"
Jan は 1月
Feb は 2月
Mar は 3月
Apr は 4月
May は 5月
Jun は 6月
Jul は 7月
Aug は 8月
Sep は 9月
Oct は 10月
Nov は 11月
Dec は 12月
下の例は英語の “million”, “billion”, “trillion” のような大きな数に付く名前(short scale1による)とその指数表記,生の値の “0” と “,” を用いた表記を並べて表示する。
008_ipairs.lua
エンコーディング:UTF-8
#! /usr/bin/lua
-- -*- coding: utf-8 -*-
--[[-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
動作確認バージョン: 5.4, JIT2.1
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]]
-----
----- 配列としてのテーブルとipairs()を汎用for文で用いたループ処理
-----
do
-- millionやbillionのような名前を順番に13個用意
local shortscale = {
'million', 'billion', 'trillion', -- 1, 2, 3
'quadrillion', 'quintillion', 'sextillion', -- 4, 5, 6
'septillion', 'octillion', 'nonillion', -- 7, 8, 9
'decillion', 'undecillion', 'duodecillion', -- 10, 11, 12
'tredecillion', -- 13
}
-- 配列の各要素ごとにループ処理
-- 同時に、ループごとに1ずつ増える数字が使用できる
-- ループ内(doとendの間)で番号iと配列の要素sとして用いる
for i, s in ipairs(shortscale) do
-- 末尾に付く "000" の数は名前の順番の数字(million:1, billion:2)より1多い
-- 1 billionは(2+1=)3個, 1 trillionは(3+1=)4個
-- 指数表記では "i + 1" を3倍し
-- 生の表記では "000" を "i + 1" 回繰り返したものをコンマ区切りで得て
-- "('000'):rep(i + 1, ',')"とする
print(
('%2d: 1 %s (1.0e+%d) は 1,%s です'):format(
i, s, 3 * (i + 1), ('000'):rep(i + 1, ',')))
end
end
-- 終了
下は実行結果。
1: 1 million (1.0e+6) は 1,000,000 です
2: 1 billion (1.0e+9) は 1,000,000,000 です
3: 1 trillion (1.0e+12) は 1,000,000,000,000 です
4: 1 quadrillion (1.0e+15) は 1,000,000,000,000,000 です
5: 1 quintillion (1.0e+18) は 1,000,000,000,000,000,000 です
6: 1 sextillion (1.0e+21) は 1,000,000,000,000,000,000,000 です
7: 1 septillion (1.0e+24) は 1,000,000,000,000,000,000,000,000 です
8: 1 octillion (1.0e+27) は 1,000,000,000,000,000,000,000,000,000 です
9: 1 nonillion (1.0e+30) は 1,000,000,000,000,000,000,000,000,000,000 です
10: 1 decillion (1.0e+33) は 1,000,000,000,000,000,000,000,000,000,000,000 です
11: 1 undecillion (1.0e+36) は 1,000,000,000,000,000,000,000,000,000,000,000,000 です
12: 1 duodecillion (1.0e+39) は 1,000,000,000,000,000,000,000,000,000,000,000,000,000 です
13: 1 tredecillion (1.0e+42) は 1,000,000,000,000,000,000,000,000,000,000,000,000,000,000 です
1,000倍ごとに次の名前に進む形 ↩︎