正如我在标题中所说的:我需要在另一个数组中的元素为真的位置选择数组中的元素。与Matlab命令相同的结果:在另一个数组中的元素为真的数组中选择元素
output = array1(array2);
其中array2是一个布尔数组。
我此刻:)
正如我在标题中所说的:我需要在另一个数组中的元素为真的位置选择数组中的元素。与Matlab命令相同的结果:在另一个数组中的元素为真的数组中选择元素
output = array1(array2);
其中array2是一个布尔数组。
我此刻:)
失去Linq中试试这个:
var bools = new[] { true, false };
var elements = new[] { 1, 2 };
var result = elements
.Take(bools.Length)
.Where((e, index) => bools[index]).ToList();
的Take
方法确保元素搜索在bools
数组的索引范围内做出。
对于一般情况下,你可以写一个自定义的扩展方法 - 例如:
public static IEnumerable<T> WhereEnabled<T>(
this IEnumerable<T> source,
IEnumerable<bool> flags)
{
using(var sourceIter = source.GetEnumerator())
using(var flagIter = flags.GetEnumerator())
{
while(sourceIter.MoveNext() && flagIter.MoveNext())
{
if (flagIter.Current) yield return sourceIter.Current;
}
}
}
然后只是:或许与向量专业化
var enabled = array1.WhereEnabled(array2);
:
public static IEnumerable<T> WhereEnabled<T>(
this T[] source,
bool[] flags)
{
int max = Math.Min(source.Length, flags.Length);
for (int i = 0; i < max; i++)
{
if (flags[i]) yield return source[i];
}
}
因此,例如,如果array1是“{”a“,”b“, “c”}'array2是'{false,true,true}'结果是'{“b”,“c”}'? – BoltClock