gpt4 book ai didi

code-golf - 家庭邮件合并( Code Golf )

转载 作者:行者123 更新时间:2023-12-04 12:00:41 24 4
gpt4 key购买 nike

前几天我写了一些邮件合并代码,虽然它有效,但我被代码关闭了。我想看看它在其他语言中的样子。

所以对于输入,例程需要一个联系人列表

Jim,Smith,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Erica,Johnson,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Abraham,Johnson,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Marge,Simpson,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Larry,Lyon,52560 Free Street,,Toronto,Ontario,Canada,M4B 1V7
Ted,Simpson,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Raoul,Simpson,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6

然后它将具有相同地址和姓氏的行合并到一个记录中。假设行未排序)。代码还应该足够灵活,可以以任何顺序提供字段(因此需要将字段索引作为参数)。对于两个人的家庭,它连接两个名字字段。对于三个或三个以上的家庭,名字设置为“the”,姓氏设置为“surname family”。
Erica and Abraham,Johnson,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Larry,Lyon,52560 Free Street,,Toronto,Ontario,Canada,M4B 1V7
The,Simpson Family,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Jim,Smith,2681 Eagle Peak,,Bellevue,Washington,United States,98004

我的 C# 实现是:
var source = File.ReadAllLines(@"sample.csv").Select(l => l.Split(','));
var merged = HouseholdMerge(source, 0, 1, new[] {1, 2, 3, 4, 5});

public static IEnumerable<string[]> HouseholdMerge(IEnumerable<string[]> data, int fnIndex, int lnIndex, int[] groupIndexes)
{
Func<string[], string> groupby = fields => String.Join("", fields.Where((f, i) => groupIndexes.Contains(i)));

var groups = data.OrderBy(groupby).GroupBy(groupby);

foreach (var group in groups)
{
string[] result = group.First().ToArray();

if (group.Count() == 2)
{
result[fnIndex] += " and " + group.ElementAt(1)[fnIndex];
}
else if (group.Count() > 2)
{
result[fnIndex] = "The";
result[lnIndex] += " Family";
}

yield return result;
}
}

我不喜欢我不得不做的 groupby 代表。我想如果 C# 有某种方法可以将字符串表达式转换为委托(delegate)。例如Func groupby = f => "f[2] + f[3] + f[4] + f[5] + f[1];"我有一种感觉,这样的事情可能可以在 Lisp 或 Python 中完成。我期待在其他语言中看到更好的实现。

编辑:社区 wiki 复选框去哪儿了?一些mod请修复它。

最佳答案

ruby — 181 155
姓名索引在代码中:ab .输入数据来自 ARGF。

a,b=0,1
[*$<].map{|i|i.strip.split ?,}.group_by{|i|i.rotate(a).drop 1}.map{|i,j|k,l,m=j
k[a]+=' and '+l[a]if l
(k[a]='The';k[b]+=' Family')if m
puts k*','}

关于code-golf - 家庭邮件合并( Code Golf ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116496/

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