2012-04-06 79 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