gpt4 book ai didi

c# - 尝试根据比较合并两个字符串数组

转载 作者:行者123 更新时间:2023-11-30 15:58:43 27 4
gpt4 key购买 nike

下面是我的类(class):

public class Regions
{
public int Id { get; set; }
public string[] ParentName { get; set; }
}

现在我有 2 个以上区域类的列表,如下所示,其中包含一些数据:

var region1 = new Regions();
var region2 = new Regions();

现在 ParentName 包含 region1 的如下数据:

[0] : Abc.mp3,Pqr.mp3
[1] : Xxx.mp3
[2] : kkk.mp3
[3] : ppp.mp3,zzz.mp3,rrr.mp3,ddd.mp3

现在 ParentName 包含 region2 的如下数据:

[0] : Abc.mp3,Pqr.mp3,lmn.mp3
[1] : rrr.mp3,ggg.mp3,yyy.mp3

现在我尝试将 region2 的 ParentName 合并到 region1,如果 region1 的任何部分在用逗号分割记录后与 region2 匹配,如下所示:

[0] : Abc.mp3,Pqr.mp3,lmn.mp3
[1] : Xxx.mp3
[2] : kkk.mp3
[3] : ppp.mp3,zzz.mp3,rrr.mp3,ddd.mp3,ggg.mp3,yyy.mp3

现在在上面的预期输出中,Abc.mp3 和 Pqr.Mp3(Region1 和 Region2)匹配,只有 Lmn.mp3 不匹配,因此它将附加在 Region1 的末尾。 p>

对于来自 region1 和 region2 的最后一条记录,rrr.mp3 是匹配的(单个匹配也足够)因此来自 region2 的非匹配记录,即 ggg.mp3,yyy.mp3 将附加在 region1 的末尾.

我在 Region1 中获得的输出:

[0] : Abc.mp3,Pqr.mp3
[1] : Xxx.mp3
[2] : kkk.mp3
[3] : ppp.mp3,zzz.mp3,rrr.mp3,ddd.mp3
[4] : Abc.mp3,Pqr.mp3,lmn.mp3
[3] : rrr.mp3,ggg.mp3,yyy.mp3

代码:

region1.ParentName = region1.ParentName.Concat(region2.ParentName).Distinct().ToArray();


public static T[] Concat<T>(this T[] x, T[] y)
{
if (x == null) throw new ArgumentNullException("x");
if (y == null) throw new ArgumentNullException("y");
int oldLen = x.Length;
Array.Resize<T>(ref x, x.Length + y.Length);
Array.Copy(y, 0, x, oldLen, y.Length);
return x;
}

最佳答案

不清楚您的名称是否包含重复项以及应如何处理它们,但这是使用指定输入生成所需结果的 LINQ 解决方案:

var e2Sets = region2.ParentName.Select(e2 => e2.Split(',')).ToList();
var result =
from e1 in region1.ParentName
let e1Set = e1.Split(',')
let e2AppendSet = (
from e2Set in e2Sets
where e1Set.Intersect(e2Set).Any()
from e2New in e2Set.Except(e1Set)
select e2New
).Distinct()
select string.Join(",", e1Set.Concat(e2AppendSet));

result.ToArray() 将为您提供所需的新 region1.ParentName

工作原理:

由于我们基本上需要两个输入序列的笛卡尔积,我们首先准备第二个序列的拆分字符串数组列表,以避免内部多个 string.Split环形。

对于第一个序列的每个元素,我们将其拆分为字符串数组,对于第二个序列中具有匹配项(使用 Intersect 方法确定)的每个拆分数组,我们使用 Except 方法选择不匹配的字符串。然后我们展平所有不匹配的字符串,应用 Distinct 删除潜在的重复项,连接两个集合并使用 string.Join 生成新的逗号分隔字符串。

关于c# - 尝试根据比较合并两个字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652101/

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