Functional Table Processing
Find First
Find the first value that matches a target.
find value
Finding keeps a result variable and only changes it when a matching element is seen.
Find First
find_first.lua
Replay: real traced execution (multi-file project)
local needle = "green"
local found = "none"
for _, color in ipairs({"red", "green", "blue"}) do
if found == "none" and color == needle then
found = color
end
end
print("needle=" .. needle)
print("found=" .. found)
local needle = "blue"
local found = "none"
for _, color in ipairs({"red", "green", "blue"}) do
if found == "none" and color == needle then
found = color
end
end
print("needle=" .. needle)
print("found=" .. found)
local needle = "gray"
local found = "none"
for _, color in ipairs({"red", "green", "blue"}) do
if found == "none" and color == needle then
found = color
end
end
print("needle=" .. needle)
print("found=" .. found)
needle ← green, found ← none
1local needle→ green = "green" --@needle="blue", "gray"2local found→ none = "none"_, color in ipairs({"red", "green", "blue"}) do
pass 1 of 34for _1, colorred in ipairs({"red", "green", "blue"}) do5 if found == "none" and color == needle then6 found = colorAll 3 passes — pass 1 is the card above pass _colorneedlefound1 1 red — — 2 2 green green none → green 3 3 blue — — found ← green
4for _, color in ipairs({"red", "green", "blue"}) do5 if foundnone == "none" and colorgreen == needlegreen then6 found→ green = colorgreen7 endprint("needle=" .. needle)
10print("needle=" .. needlegreen)11print("found=" .. foundgreen)outputneedle=green found=green
needle ← blue, found ← none
1local needle→ blue = "blue"2local found→ none = "none"_, color in ipairs({"red", "green", "blue"}) do
pass 1 of 34for _1, colorred in ipairs({"red", "green", "blue"}) do5 if found == "none" and color == needle then6 found = colorAll 3 passes — pass 1 is the card above pass _colorneedlefound1 1 red — — 2 2 green — — 3 3 blue blue none → blue found ← blue
4for _, color in ipairs({"red", "green", "blue"}) do5 if foundnone == "none" and colorblue == needleblue then6 found→ blue = colorblue7 endprint("needle=" .. needle)
10print("needle=" .. needleblue)11print("found=" .. foundblue)outputneedle=blue found=blue
needle ← gray, found ← none
1local needle→ gray = "gray"2local found→ none = "none"_, color in ipairs({"red", "green", "blue"}) do
pass 1 of 34for _1, colorred in ipairs({"red", "green", "blue"}) do5 if found == "none" and color == needle then6 found = colorAll 3 passes — pass 1 is the card above pass _color1 1 red 2 2 green 3 3 blue print("needle=" .. needle)
10print("needle=" .. needlegray)11print("found=" .. foundnone)outputneedle=gray found=none