我需要拆分一个包含逗号连接的电子邮件的字符串。 例如:
EMAIL1 @ gmail.com,EMAIL2 @ gmail.com,EMAIL3 @ gmail.com,
分割字符串并将其添加到字典的方法:
public Dictionary<string[], string[]> GetMail(int id)
{
var email = db.table1.ToList()
.Where(r => r.idTable == id)
.Select(em => em.email.Split(','));
var dictionary = new Dictionary<string[], string[]>();
foreach (var mail in email)
dictionary.Add(mail,mail);
return dictionary;
}
但是我需要在不同的索引中添加每个索引,因为结果是:
[0] "email1@gmail.com,email2@gmail.com,email3@gmail.com"
我需要的是这样的事情:
[0] "email1@gmail.com"
[1] "email2@gmail.com"
[2] "email3@gmail.com"
有可能这样做吗?我该怎么做?
答案 0 :(得分:3)
看来,你想要这样的东西(如果你坚持Dictionary
):
// Dictionary<int, string>:
// Key - int - index
// Value - string - eMail
public Dictionary<int, string> GetMail(int id) {
var result = db.table1
.AsEnumerable() // Do not materialize prematurely
.Where(row => row.idTable == id)
.SelectMany(row => row.email.Split(',')) // flatten sequence
.Select((email, index) => new { // key and value specifictaion
key = index,
email = email })
.ToDictionary(pair => pair.key, // final dictionary
pair => pair.email);
}
但Dictionary
在问题的上下文中是多余的:数组将提供相同的功能:dict[key]
与array[index]
public string[] GetMail(int id) {
var result = db.table1
.AsEnumerable() // Do not materialize prematurely
.Where(row => row.idTable == id)
.SelectMany(row => row.email.Split(',')) // flatten sequence
// .Distinct() // if you want distinct eMails only
.ToArray();
}
答案 1 :(得分:2)
如果键和值相同,则使用字典没有意义。使用:
HashSet<string>
答案 2 :(得分:0)
string emails = "email1@gmail.com,email2@gmial.com,email3@gmail.com";
Dictionary<int, string> dictEmails = new Dictionary<int, string>();
string[] arrEmails = emails.Split(',');
for (int i = 0; i < arrEmails.Length; i++)
{
dictEmails.Add(i, arrEmails[i]);
}
答案 3 :(得分:0)
感谢大家的回复,我使用SelectMany
代替Select
解决了问题(老实说,我不知道这种方法)。
public Dictionary<string, string> GetMail(int id)
{
var email = db.table1.ToList()
.Where(r => r.idTable == id)
//SelectMany instead of Select
.SelectMany(em => em.email.Split(','));
var dictionary = new Dictionary<string, string>();
foreach (var mail in email)
dictionary.Add(mail,mail);
return dictionary;
//this returns:
//[0]{[email1@gmail.com, email1@gmail.com]}
//[1]{[email2@gmail.com, email2@gmail.com]}
//[2]{[email3@gmail.com, email3@gmail.com]}
}
使用字典有什么意义?
这是我正在开发的应用程序的要求,想法是使用键/值在TokenBox中使用,无论密钥和值是否相同(可以是在将来更改)例如用户名和电子邮件
我看不到您的屏幕截图
我道歉,我认为这是因为我在stackoverflow上没有足够的点来附加图像:(