gpt4 book ai didi

c# - 在 C# 中加入/合并数组

转载 作者:太空狗 更新时间:2023-10-29 23:04:48 25 4
gpt4 key购买 nike

我有两个或多个数组——一个带有 ID,一个或多个带有字符串值。我想将它们合并到一个哈希表中,以便我可以按 ID 查找值。

下面的函数可以完成这项工作,但更短更甜美的版本(LINQ?)会更好:

Dictionary<int, string[]> MergeArrays( IEnumerable<int> idCollection,
params IEnumerable<string>[] valueCollections )
{
var dict = new Dictionary<int, string[]>();

var idL = idCollection.Count();
while ( idL-- > 0 )
{
dict[idCollection.ElementAt( idL )] = new string[valueCollections.Length];

var vL = valueCollections.Length;
while ( vL-- > 0 )
dict[idCollection.ElementAt( idL )][vL] = valueCollections[vL].ElementAt( idL );
}

return dict;
}

有什么想法吗?

最佳答案

目前这是非常低效的——所有对 ElementAt 的调用每次都可能会遍历整个序列(只要它们需要)。 (这取决于序列的实现。)

但是,我一点也不确定我什至理解这段代码在做什么(使用 foreach 循环几乎肯定会使它更清晰,就像向前而不是向后迭代一样。你能提供一些示例输入吗?和预期的输出?

编辑:好的,我想我明白这里发生了什么;您正在有效地调整 valueCollections。我怀疑你会想要这样的东西:

static Dictionary<int, string[]> MergeArrays(
IEnumerable<int> idCollection,
params IEnumerable<string>[] valueCollections)
{
var valueCollectionArrays = valueCollections.Select
(x => x.ToArray()).ToArray();
var indexedIds = idCollection.Select((Id, Index) => new { Index, Id });

return indexedIds.ToDictionary(x => Id,
x => valueCollectionArrays.Select(array => array[x.Index]).ToArray());
}

虽然很丑。如果您可以使 idCollection 成为一个数组,坦率地说,它会更容易。

编辑:好的,假设我们可以改用数组:

static Dictionary<int, string[]> MergeArrays(
int[] idCollection,
params string[][] valueCollections)
{
var ret = new Dictionary<int, string[]>();
for (int i=0; i < idCollection.Length; i++)
{
ret[idCollection[i]] = valueCollections.Select
(array => array[i]).ToArray();
}
return ret;
}

我已经(希望)纠正了第一个版本中的一个错误——我对哪些值是数组而哪些不是数组感到困惑。第二个版本没有那么明确,但我个人认为它更清晰。

关于c# - 在 C# 中加入/合并数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/545421/

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