() Contains ()? | |
[ v] contains []? | |
Category | List |
Type | Boolean |
Introduced in | 1.4 |
- This article is about the list block. For the Operators block that checks if one string contains the other, see () Contains ()? (Operators block).
The () contains ()? block is a boolean block and a list block. The block checks if any items in the specified list are equal to the given text — if at least one of them is, the block returns true; if none of them are, it returns false. The item must contain the exact text; for example, "abc" would not work if the item contained "abcde". This block was case-sensitive in Scratch 1.4.
Example Uses
This block can be used to check whether an item is in a list or not.
Some common uses for the () Contains ()? block:
- Scanning lists
if <[lunch v] contains [spinach]?> then say [Yuck! Spinach!] end
- Checking if an item already exists before adding it to an inventory
if <not <[collection v] contains [fan]?>> then add [fan] to [collection v] else say [I already have a fan in my collection.] end
- Making sure an item is in an inventory before performing a command.
if <[collection v] contains [fan]?> then broadcast (action v) else say [It's too far to reach the pile of sand on that platform.] end
- Checking if a selected level is locked or unlocked for the player.
ask [which level would you like to play?] and wait if <[unlocked levels v] contains (answer)?> then broadcast(start level v) else say [The level you chose hasn't been unlocked yet! Play the previous level to play this one.
Case Sensitivity
This block is not case sensitive in its checks. This means that if a list contains exactly "apple", the below will occur:
<[list v] contains [APPLE]> // reports true <[list v] contains [apple]> // reports true <[list v] contains [Apple]> // reports true
Workaround
- Main article: List of Block Workarounds
This block can be replicated with the following code:
set [count v] to [1] repeat until <<(count) > (length of [list v])> or <(item (count) of [list v]) = (thing)>> change [count v] by (1) end set [report v] to <(item (count) of [list v]) = (thing)>
When it is needed,<(report) = [true]>
is placed into the boolean insert.
However, a simpler workaround is to just use the (item # of [thing] in [list v])
, which can be inserted into boolean inserts:
if (item # of (. . .:: grey) in [list v]) then . . . end