๐ List ํด๋์ค ์ฌ์ฉ ์ค ์์ ์ ๊ฑฐ ์ค ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
C#์ List ํด๋์ค์๋ ์์ดํ ์ ์ ๊ฑฐํ๋ ๋ฉ์๋๊ฐ Remove, RemoveAt๋ก 2๊ฐ ์กด์ฌํ๋ค.
Remove(obejct element) | ํน์ ์์๋ฅผ ๋ฆฌ์คํธ์์ ์ ๊ฑฐ ( ๊ฐ์ฒด ์ง์ ) |
RemoveAt(int index) | ํน์ ์์น์ ์์๋ฅผ ๋ฆฌ์คํธ์์ ์ ๊ฑฐ ( ์ธ๋ฑ์ค ์ง์ ) |
์ด ๋ ์๋์ ๊ฐ์ด ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ฉฐ Remove ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด,
class Game
{
public string name; // ๊ฒ์ ์ด๋ฆ
public int favorite // ๋์ ์ ํธ๋
}
class Program
{
static void Main(string[] args)
{
List<Game> list = new List<Game>();
list.Add(new Game() { name = "๋ฉ์ดํ์คํ ๋ฆฌ", favorite = 1});
list.Add(new Game() { name = "FIFA4", favorite = 2});
list.Add(new Game() { name = "์นดํธ๋ผ์ด๋", favorite = 3});
list.Add(new Game() { name = "๋์ ์คํ์ดํฐ", favorite = 4});
list.Add(new Game() { name = "๋ง๋น๋
ธ๊ธฐ", favorite = 5});
list.Add(new Game() { name = "ํฌ๋ ์ด์ง์์ผ์ด๋", favorite = 6});
foreach (var item in list)
{
if (item.favorite > 1)
{
list.Remove(item);
}
} // ์๋ฌ ๋ฐ์?
}
}
* System.InvalidOperationException ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๐ง ์ ๋ฐ์ํ ๊น?
์์๊ฐ ํ๋ ์ ๊ฑฐ๋๋ฉด์ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ก ํ๋์ฉ ๋ฐ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด for๋ฌธ์ ์ธ๋ฑ์ค๋ ์์๋๋ก ๋๊ณ ์๋ ๋ฐ๋ฉด์ List์ ์์๋ค์ ์ ๊ฑฐ๋ ์์์ ์๋ฆฌ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ง ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น?
๋ณดํต C#์์๋ for๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ํฌ๊ฒ for๋ฌธ, ์ญ for๋ฌธ, forEach๋ฌธ์ผ๋ก ๋๋๋ค.
๊ทธ๋ฌ๋ for๋ฌธ๊ณผ forEach๋ฌธ์ ์์ ๋งํ ์๋ฌ๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์
์ญ for๋ฌธ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
์?
์ญ for๋ฌธ์ ์ฌ์ฉํ๋ค๋ฉด ํด๋น ์ธ๋ฑ์ค๊ฐ ์ ๊ฑฐ๋๋๋ผ๋ ๋จ์์๋ ๋ถ๋ถ์ ๊ฐ๋ค์ ๋ณ๊ฒฝ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
โป ์ญ for๋ฌธ์ด๋ ์ฝ๊ฒ ๋งํด for๋ฌธ์ ์ธ๋ฑ์ค ์์๋ฅผ List์ ๋์์๋ถํฐ ์ญ์์ผ๋ก ๋ฐ๋ณตํด์ ์คํํ๋ ๊ฒ์ด๋ค.
์๋์ ๊ฐ์ด ์ญ for๋ฌธ์ ์ฌ์ฉํด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ค๋ฅ๊ฐ ๋์ค์ง ์๊ณ ์ ๋์์ด ๋๋ค.
for (int i = list.Count - 1; i >= 0; i--)
{
if (list[i].favorite > 1)
{
list.RemoveAt(i);
}
}
๊ถ๊ธํ์ ๊ฒ์ด ์๊ฑฐ๋ ์๋ชป๋ ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง ๋๊ธ ๋ฌ์์ฃผ์ธ์!