gpt4 book ai didi

c# - 如何使用其他集合替换集合中的一系列项目?

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:39 26 4
gpt4 key购买 nike

假设我有一个 int 数组:

var source = new int[] { 1, 2, 3, 4, 5 };

我想用这些数组替换它的一部分:

var fromArray = new int[] { 1, 2 };
var toArray = new int[] { 11, 12 };

我需要使用上面的数组生成的输出是:11, 12, 3, 4, 5 .

在更高级的情况下,我可能还需要使用多个参数替换源。认为fromArraytoArray来自 Dictionary<int[], int[]> :

IEnumerable<T> Replace(IEnumerable<T> source,
IDictionary<IEnumerable<T>, IEnumerable<T>> values)
{
// "values" parameter holds the pairs that I want to replace.
// "source" can be `IList<T>` instead of `IEnumerable<T> if an indexer
// is needed but I prefer `IEnumerable<T>`.
}

我怎样才能做到这一点?

编辑:项目的顺序很重要。想像 String.Replace ;如果 fromArray 的全部内容source 中不存在(例如,如果源只有 1 而没有 2 )该方法不应尝试替换它。一个例子:

var source = new int[] { 1, 2, 3, 4, 5, 6 };
var dict = new Dictionary<int[], int[]>();

// Should work, since 1 and 2 are consecutive in the source.
dict[new int[] { 1, 2 }] = new int[] { 11, 12 };

// There is no sequence that consists of 4 and 6, so the method should ignore it.
dict[new int[] { 4, 6 }] = new int[] { 13, 14 };

// Should work.
dict[new int[] { 5, 6 }] = new int[] { 15, 16 };

Replace(source, dict); // Output should be: 11, 12, 3, 4, 15, 16

最佳答案

好的,这是基于您编辑的问题的答案。当然完全未经测试。

static IEnumerable<T> Replace<T>(IEnumerable<T> source, IDictionary<IEnumerable<T>, IEnumerable<T>> values)
{
foreach (var kvp in values)
source = ReplaceOne(source, kvp.Key, kvp.Value);
return source;
}

static IEnumerable<T> ReplaceOne<T>(IEnumerable<T> source, IEnumerable<T> fromSeq, IEnumerable<T> toSeq)
{
var sArr = source.ToArray();

int replLength = fromSeq.Count();
if (replLength != toSeq.Count())
throw new NotSupportedException();

for (int idx = 0; idx <= sArr.Length - replLength; idx++)
{
var testSeq = Enumerable.Range(idx, replLength).Select(i => sArr[i]);
if (testSeq.SequenceEqual(fromSeq))
{
Array.Copy(toSeq.ToArray(), 0, sArr, idx, replLength);
idx += replLength - 1;
}
}

return sArr;
}

关于c# - 如何使用其他集合替换集合中的一系列项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11913268/

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