gpt4 book ai didi

c# - Linq 选择特定索引处的数组值

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

我有这个方法:

public void Foo(double[] values1, double[] values2, int[] indexes)
{
var values1AtIndexes = new List<double>();
var values1NotAtIndexes = new List<double>();
var values2AtIndexes = new List<double>();
var values2NotAtIndexes = new List<double>();

for (int i = 0; i < values1.Length; i++)
{
if (indexes.Contains(i))
{
values1AtIndexes.Add(values1[i]);
values2AtIndexes.Add(values2[i]);
}
else
{
values1NotAtIndexes.Add(values1[i]);
values2NotAtIndexes.Add(values2[i]);
}
}
}

我想知道是否有 LINQ 方法来解决这个问题?

最佳答案

它可能看起来像那样(不看性能)。

所以我不确定它是否更短或更容易理解。

values1AtIndexes = values1.Where((m, index) => indexes.Contains(index)).ToList();
values2AtIndexes = values2.Where((m, index) => indexes.Contains(index)).ToList();
//alternative
values1AtIndexes = indexes.Select(m => values1[m]).ToList();
values1AtIndexes = indexes.Select(m => values2[m]).ToList();


//might be wrong if your lists contain duplicated values
values1NotAtIndexes = values1.Except(values1AtIndexes).ToList();
values2NotAtIndexes = values2.Except(values2AtIndexes).ToList();

正如您所指出的,如果您有重复项,Except 可能会给您带来错误的结果。

所以如果你知道你可以有重复项,你应该这样做

values1NotAtIndexes = values1.Where((m, index) => !indexes.Contains(index)).ToList();

关于c# - Linq 选择特定索引处的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636684/

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