0

假设我有两个数组:

Dim RoomName() As String = {(RoomA), (RoomB), (RoomC), (RoomD), (RoomE)}
Dim RoomType() As Integer = {1, 2, 2, 2, 1} 

我想根据“ RoomType ”数组的条件从“ RoomName ”数组获取一个值。例如,我想得到一个带有“ RoomType = 2 ”的“RoomName”,所以算法应该随机化“RoomType”为“2”的数组的索引并从索引“ 1-3 ”获取单个值范围“ 只要。

是否有任何可能的方法来使用数组来解决问题,或者有没有更好的方法来做到这一点?非常感谢您的宝贵时间 :)

4

1 回答 1

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]);
于 2012-04-06T09:16:11.360 回答