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

needle
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)
  1. needle ← green, found ← none

    1local needle→ green = "green" --@needle="blue", "gray"2local found→ none = "none"
  2. _, color in ipairs({"red", "green", "blue"}) do

    pass 1 of 3
    4for _1, colorred in ipairs({"red", "green", "blue"}) do5  if found == "none" and color == needle then6    found = color
    All 3 passes — pass 1 is the card above
    pass_colorneedlefound
    11red
    22greengreennone green
    33blue
  3. found ← green

    4for _, color in ipairs({"red", "green", "blue"}) do5  if foundnone == "none" and colorgreen == needlegreen then6    found→ green = colorgreen7  end
  4. print("needle=" .. needle)

    10print("needle=" .. needlegreen)11print("found=" .. foundgreen)
    outputneedle=green
    found=green
  1. needle ← blue, found ← none

    1local needle→ blue = "blue"2local found→ none = "none"
  2. _, color in ipairs({"red", "green", "blue"}) do

    pass 1 of 3
    4for _1, colorred in ipairs({"red", "green", "blue"}) do5  if found == "none" and color == needle then6    found = color
    All 3 passes — pass 1 is the card above
    pass_colorneedlefound
    11red
    22green
    33bluebluenone blue
  3. found ← blue

    4for _, color in ipairs({"red", "green", "blue"}) do5  if foundnone == "none" and colorblue == needleblue then6    found→ blue = colorblue7  end
  4. print("needle=" .. needle)

    10print("needle=" .. needleblue)11print("found=" .. foundblue)
    outputneedle=blue
    found=blue
  1. needle ← gray, found ← none

    1local needle→ gray = "gray"2local found→ none = "none"
  2. _, color in ipairs({"red", "green", "blue"}) do

    pass 1 of 3
    4for _1, colorred in ipairs({"red", "green", "blue"}) do5  if found == "none" and color == needle then6    found = color
    All 3 passes — pass 1 is the card above
    pass_color
    11red
    22green
    33blue
  3. print("needle=" .. needle)

    10print("needle=" .. needlegray)11print("found=" .. foundnone)
    outputneedle=gray
    found=none