根据其他数组的值从数组中获取值(VB.Net)

时间:2012-04-06 08:18:46

标签: vb.net arrays

假设我有两个数组:

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 “获得单个值范围。

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

1 个答案:

答案 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]);