注:以下のコード例ではC#を使用していますが、vb.netのインテントを読むことができれば幸いです。
もっと簡単な方法は、nameプロパティとtypeプロパティの両方を含む構造/クラスを作成することです。
public class Room
{
public string Name { get; set; }
public int Type { get; set; }
public Room(string name, int type)
{
Name = name;
Type = type;
}
}
次に、部屋のセットを指定すると、単純なlinq式を使用して特定のタイプの部屋を見つけることができます。
var match = rooms.Where(r => r.Type == 2).Select(r => r.Name).ToList();
次に、一致する部屋名のセットの中からランダムなエントリを見つけることができます(以下を参照)
ただし、並列配列を使い続けたい場合、1つの方法は、型配列から一致するインデックス値を見つけ、次に一致する名前を見つけ、次にランダム関数を使用して一致する値の1つを見つけることです。
var matchingTypeIndexes = new List<int>();
int matchingTypeIndex = -1;
do
{
matchingTypeIndex = Array.IndexOf(roomType, 2, matchingTypeIndex + 1);
if (matchingTypeIndex > -1)
{
matchingTypeIndexes.Add(matchingTypeIndex);
}
} while (matchingTypeIndex > -1);
List<string> matchingRoomNames = matchingTypeIndexes.Select(typeIndex => roomName[typeIndex]).ToList();
次に、(上記で生成されたリストの1つから)一致するもののランダムなエントリを検索します。
var posn = new Random().Next(matchingRoomNames.Count);
Console.WriteLine(matchingRoomNames[posn]);