我有一個電子郵件串列,我想mylist使用包含所有字串項的域名或特定子字串(例如:@gmail.com 或@yahoo.com)進行分組。
請注意,我不只想要 gmail 和 yahoo,因為有很多域,例如 @yahoo.fr 或 @hotmail.com。
之后,我想將所有子組專案添加到自己的分隔串列字串中。
例如:
var Emails = new List<string>
{
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]"
};
我嘗試使用正則運算式引數進行分組,但它不起作用
uj5u.com熱心網友回復:
您可以使用它來獲取域字典到電子郵件地址:
Dictionary<string, List<string>> emailsByDomain = emails
.GroupBy(e => e.Split('@', 2)[1].ToLowerInvariant())
.ToDictionary(g => g.Key, g => g.ToList());
基本上我們在“@”處拆分電子郵件地址,取后半部分,將其轉換為小寫,然后將其用作字典鍵。
如果您的某些串列可能不是電子郵件地址(沒有@),那么您可以使用以下命令過濾掉它們.Where:
Dictionary<string, List<string>> emailsByDomain = emails
.Where(e => e.IndexOf('@', StringComparison.Ordinal) >= 0)
.GroupBy(e => e.Split('@', 2)[1].ToLowerInvariant())
.ToDictionary(g => g.Key, g => g.ToList());
請注意,根據您的 .NET 版本,您可能需要將.GroupBy行更改為:.GroupBy(e => e.Split(new string[] { "@" }, 2, StringSplitOptions.None)[1].ToLowerInvariant())
在線嘗試
uj5u.com熱心網友回復:
有趣的一個。@ProgrammingLlama 對字典有一個好主意。
using System.Text.Json;
List<string> emails = new()
{
"[email protected]",
"[email protected]",
"[email protected]",
"notanemail",
"[email protected]",
"[email protected]"
};
var groupedEmails = from email in emails
where email.Contains("@")
let domain = email.Substring(email.IndexOf("@") 1)
group email by domain into g
select new { Domain = g.Key, Emails = g };
var dictionaryEmails = groupedEmails.ToDictionary(x => x.Domain, x => x.Emails);
System.Console.WriteLine(JsonSerializer.Serialize(dictionaryEmails, new JsonSerializerOptions { WriteIndented = true }));
結果
{
"gmail.com": [
"[email protected]"
],
"yahoo.fr": [
"[email protected]",
"[email protected]"
],
"tafmail.com": [
"[email protected]"
],
"mail.ru": [
"[email protected]"
]
}
uj5u.com熱心網友回復:
您可以嘗試 .ToLookup() 并從 @ 的索引傳入正則運算式或子字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523789.html
標籤:C#林克通过...分组
