gpt4 book ai didi

c# - 在列表中查找重复但符合条件

转载 作者:太空狗 更新时间:2023-10-30 00:55:59 26 4
gpt4 key购买 nike

想要从列表中删除重复项,所以如果我的列表包含:

www.test.com
test.com
mytest.com

我希望最终列表如下所示(仅从前面的副本中选择带有 www 的域):

www.test.com
mytest.com

我有这个 linq,但它似乎忽略了前面没有 www 的所有域,因为它只选择了 www 域:

var result=inputList.Where(x=>x.DomainName.StartsWith("www.")).Distinct();

编辑:

@DanielHilgarth:我只是运行您的代码,但没有产生正确的结果。我有:

test.com 
www.test.com
test2.com
www.test2.com
test3.com
www.test3.com
test4.com

在我的列表中。它返回这个:

test.com
www.test.com
www.test2.com
www.test3.com

下面是我如何使用你的代码:

var result = lstServerBindings.GroupBy(x => x.DomainName.StartsWith("www.") ? x.DomainName : "www." + x)
.Select(x =>
{
var domain =
x.FirstOrDefault(y => y.DomainName.StartsWith("www."));
if (domain == null)
return x.First();
return domain;
});

然后我执行一个 foreach 循环以分配给新列表:

foreach (var item in result)
{
lstUniqueServerBindings.Add(new ServerBindings
{
IPAddress = item.IPAddress,
PortNumber = item.PortNumber,
DomainName = item.DomainName
});

}

最佳答案

我想你想要这样的东西:

var result = domains.GroupBy(x => x.StartsWith("www.") ? x : "www." + x)
.Select(x =>
{
var domain =
x.FirstOrDefault(y => y.StartsWith("www."));
if(domain == null)
return x.First();
return domain;
});

我用这个输入测试了它:

var domains = new List<string>
{
"www.test.com",
"test.com",
"mytest.com",
"abc.com",
"www.abc.com"
};

结果是:

www.test.com
mytest.com
www.abc.com

您的代码应如下所示(注意第二行末尾的附加 .DomainName):

var result = lstServerBindings.GroupBy(x => x.DomainName.StartsWith("www.") ? 
x.DomainName : "www." + x.DomainName)
.Select(x =>
{
var domain =
x.FirstOrDefault(y =>
y.DomainName.StartsWith("www."));
if (domain == null)
return x.First();
return domain;
});

顺便说一句:您可以通过将代码更改为这样来节省 foreach 循环:

var result = lstServerBindings.GroupBy(x => x.DomainName.StartsWith("www.") ? 
x.DomainName : "www." + x.DomainName)
.Select(x =>
{
var item =
x.FirstOrDefault(y =>
y.DomainName.StartsWith("www."));
if (item == null)
item = x.First();

return new ServerBindings
{
IPAddress = item.IPAddress,
PortNumber = item.PortNumber,
DomainName = item.DomainName
};
});

关于c# - 在列表中查找重复但符合条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833344/

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