gpt4 book ai didi

c# - 交错放置一组电子邮件地址,避免具有相同域的项目连续

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:12 25 4
gpt4 key购买 nike

我正在寻找一种有效的方法来对电子邮件地址数组进行排序,以避免在 C# 中具有相同域的项目是连续的。

数组中的电子邮件地址已经不同并且全部为小写。

例子:

给定一个包含以下条目的数组:

john.doe@domain1.com
jane_doe@domain1.com
patricksmith@domain2.com
erick.brown@domain3.com

我想获得类似下面的东西:

john.doe@domain1.com    
patricksmith@domain2.com
jane_doe@domain1.com
erick.brown@domain3.com

最佳答案

借助扩展方法(从 https://stackoverflow.com/a/27533369/172769 中窃取),您可以这样做:

List<string> emails = new List<string>();
emails.Add("john.doe@domain1.com");
emails.Add("jane_doe@domain1.com");
emails.Add("patricksmith@domain2.com");
emails.Add("erick.brown@domain3.com");

var q = emails.GroupBy(m => m.Split('@')[1]).Select(g => new List<string>(g)).Interleave();

Interleave方法定义为:

public static IEnumerable<T> Interleave<T>(this IEnumerable<IEnumerable<T>> source )
{
var queues = source.Select(x => new Queue<T>(x)).ToList();
while (queues.Any(x => x.Any())) {
foreach (var queue in queues.Where(x => x.Any())) {
yield return queue.Dequeue();
}
}
}

所以基本上,我们根据电子邮件地址的域部分创建组,将每个组转换(或选择)到一个 List<string> 中。 ,然后“交错”这些列表。

我已经针对您的示例数据进行了测试,但可能需要进行更彻底的测试才能找到边缘情况。

DotNetFiddle snippet

干杯

关于c# - 交错放置一组电子邮件地址,避免具有相同域的项目连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com