2012-04-06 80 views
0

假设我有两个数组:获取基于他人阵列(VB.Net)的值从数组的值

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

我想从基于“ROOMNAME”数组的值标准为“RoomType”数组。例如,我想获得“RoomName”和“RoomType = 2”,因此该算法应随机化“RoomType”为“2”的数组的索引,并获取单个值范围来自索引“1-3”。

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

回答

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(); 

然后找到那些匹配(从上面生成的列表之一)的随机条目:您的答复

+0

您好,感谢。它有一些修改后的作品! :) – 2012-04-07 03:08:00