Queue内の値を変更する方法について調べました。
値型と参照型でそれぞれ方法があるんですが、そもそもQueueを使うときに内部の値を変更しないような設計にするのが良いと思ったというのが結論です。
値の変更方法は以下に記述しているので参考にしてください。
値型の値を変更する方法
値型の場合、直接値を修正できないので新たなキューに値をセットしています。
Queue<int> queue1 = new Queue<int>();
queue1.Enqueue(1);
queue1.Enqueue(2);
queue1.Enqueue(3);
queue1.Enqueue(4);
foreach (var i in queue1)
{
Console.WriteLine(i);
}
Queue<int> queue2 = new Queue<int>();
foreach (var i in queue1)
{
queue2.Enqueue(i * 2);
}
foreach (var i in queue2)
{
Console.WriteLine(i);
}
出力結果は以下の通りです。
1
2
3
4
2
4
6
8
参照型の値を変更する方法
こんな感じのクラスを作っておいて、このクラスをキューに詰め込んでいきます。
public class MyClass
{
public int Value { get; set; }
public MyClass(int value)
{
Value = value;
}
}
参照型なのでキューの値を修正することで、変更内容が反映されます。
Queue<MyClass> queue3 = new Queue<MyClass>();
queue3.Enqueue(new MyClass(1));
queue3.Enqueue(new MyClass(2));
queue3.Enqueue(new MyClass(3));
queue3.Enqueue(new MyClass(4));
foreach (var i in queue3)
{
Console.WriteLine(i.Value);
}
foreach (var i in queue3)
{
i.Value = i.Value * 2;
}
foreach (var i in queue3)
{
Console.WriteLine(i.Value);
}
出力結果は値型と同じ結果になります。
1
2
3
4
2
4
6
8