我有這樣的事情硬編碼:填充一個多維數組
private string[,] m_RolesForUser = new string[,] {
{"John","President,Chair"},
{"Lisa","Chair"},
{"Mike","Executive,President,Chair"},
};
我將如何填補這個數組,如果數據源是由角色的表和用戶的表。用戶可以有多個角色。不知道構造代碼來支持這樣的語法的語法是什麼。
我有這樣的事情硬編碼:填充一個多維數組
private string[,] m_RolesForUser = new string[,] {
{"John","President,Chair"},
{"Lisa","Chair"},
{"Mike","Executive,President,Chair"},
};
我將如何填補這個數組,如果數據源是由角色的表和用戶的表。用戶可以有多個角色。不知道構造代碼來支持這樣的語法的語法是什麼。
爲什麼不在這裏使用對象列表的Dictionary
? C#是OO語言,因此使用對象更受歡迎。下面的例子使用字符串,以適應你的榜樣,但你甚至可以創建一個Person
類和Role
類,並有一個Person
綁列表Role
小號
private Dictionary<string, List<string>> roles = new Dictionary
{
{"John", new List{"President","Chair"}},
{"Lisa", new List{"Chair"}},
{"Mike", new List{"Executive","President","Chair"}}
}
爲了尋找麗莎的角色:
//Just verifying that Lisa exists.
//If you try to access a non-existent key you will get an exception
var roleLookingFor = "Lisa";
if(roles.Contains(roleLookingFor))
{
foreach(var role in roles[roleLookingFor])
{
Console.Out.WriteLine(String.Format("{0} is in role '{1}'.",
roleLookingFor, role));
}
}
謝謝。你能告訴我如何閱讀或遍歷字典尋找角色「麗莎」有? – obautista 2012-03-15 14:12:00
我剛剛創建了一個如何找到角色的示例片段。 – 2012-03-15 14:17:49
您有不同的數據結構選項。一個想法是對用戶類和存儲角色列表,爲每個用戶
public class User
{
public User()
{
Roles = new List<string>();
}
public int ID { get; set; }
public string Name { get; set; }
public List<string> Roles { get; private set; }
}
然後你就可以有一個用戶列表
List<User> _users = new List<User>();
如果你想存儲更多每個角色的信息,你可以有一個角色類以及每個角色的用戶列表。與數組相比,List<T>
的好處是列表動態增長。
填補這一結構是這樣
using (OleDbConnection cnn = new OleDbConnection(ConnectionString)) {
string query = "SELECT ... FROM users LEFT JOIN user_roles ON ... ORDER BY UserID";
using (OleDbCommand cmd = new OleDbCommand(query, cnn)) {
cnn.Open();
using (OleDbDataReader reader = cmd.ExecuteReader()) {
int userIdOrdinal = reader.GetOrdinal("UserID");
int userNameOrdinal = reader.GetOrdinal("UserName");
int roleIdOrdinal = reader.GetOrdinal("RoleID");
int roleNameOrdinal = reader.GetOrdinal("RoleName");
User user = null;
while (reader.Read()) {
int userID = reader.GetInt32(userIdOrdinal);
if (user == null || user.ID != userID) {
user = new User { ID = userID };
user.Name = reader.GetString(userNameOrdinal);
_users.Add(user);
}
if (!reader.IsDBNull(roleIdOrdinal)) {
user.Roles.Add(reader.GetString(roleNameOrdinal);
}
}
}
}
}
(原因你會使用approriate連接類型,讀者類型等)
作爲一般規則,如果你的語言是C#,多維數組通常是問題的一部分,而不是解決方案的一部分。可悲的是,他們的支持很不足。 – xanatos 2012-03-15 14:00:36
請不要用「C#」等來標題。這就是標籤的用途。 – 2012-03-15 14:01:17
我會推薦使用一些自制的結構或一些其他複雜的數據結構,如列表或數組的字典。我更喜歡有完整的面向對象的觀點,但那就是我的觀點 – squelos 2012-03-15 14:03:00