假设我有两个数组:
Dim RoomName() As String = {(RoomA), (RoomB), (RoomC), (RoomD), (RoomE)}
Dim RoomType() As Integer = {1, 2, 2, 2, 1}
我想根据“ RoomType ”数组的条件从“ RoomName ”数组中获取值。例如,我希望使用“ RoomType = 2 ”获得“ RoomName ”,因此算法应该将数组的索引随机化为“ RoomType < / strong>“是”2“,并且仅从索引” 1-3 “获得单个值范围。
有没有可能的方法来解决使用数组的问题,还是有更好的方法来做到这一点?非常感谢您的时间:))
答案 0 :(得分:1)
注意:下面的代码示例使用C#,但希望您可以阅读vb.net的意图
嗯,更简单的方法是拥有一个包含名称和类型属性的结构/类,例如:
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();
然后你可以从匹配的房间名称中找到一个随机条目(见下文)
但是假设你想坚持使用并行数组,一种方法是从类型数组中找到匹配的索引值,然后找到匹配的名称,然后使用随机函数找到一个匹配的值。
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();
然后找到匹配的随机条目(来自上面生成的一个列表):
var posn = new Random().Next(matchingRoomNames.Count);
Console.WriteLine(matchingRoomNames[posn]);