【问题标题】:Find index of array with specific length in a List?在列表中查找具有特定长度的数组的索引?
【发布时间】:2021-09-07 09:45:56
【问题描述】:

在我的应用程序中,我有一个List<float[]>,每次应用程序运行时,数组的大小都不同。我想找出List<float[]>中长度小于或等于指定值的数组的索引。

假设我有一个列表[ float[100], float[80], float[101] ]。现在我想知道那些长度小于等于100的数组的索引。

我可以创建循环并遍历列表中的每个元素,但这种方式似乎太长了。有没有可能的 LINQ 方式?

【问题讨论】:

  • 你不需要遍历每个数组,你可以使用 Length 属性。
  • 您可以使用 Linq 获取索引,但它需要查找表 iirc。一个简单的 for 循环似乎是一个不错的方法。
  • @hijinxbassist 我说的是同样的事情,我可以遍历列表中的每个元素并使用长度属性过滤出满足长度条件的数组。
  • 但我真的不明白为什么我的问题会被否决。
  • @hijinxbassist:这里的“查找表”是什么意思?自然的 LINQ 查询只会遍历列表。

标签: c# list linq indexing


【解决方案1】:

您可以使用 Linq 的 Select 获取索引,并使用 Where 过滤掉它们:

List<int> indexes = list.Select((arr, ind) => (arr, ind))
                        .Where(x => x.arr.Length <= 100)
                        .Select(x => x.ind)
                        .ToList();

【讨论】:

  • OP 想知道过滤项目的索引,如果我没记错的话。也许他问错了问题,我不知道……
  • @Marco 我以某种方式完全误读了这个问题......已编辑并修复。
  • @Marco 是的,我想知道那些满足长度约束的数组的索引。
  • @Mureinik 感谢您的回复,但我无法编译代码,因为它在第一个 Select 语句中显示错误,“不能在此声明名为 'arr' 的局部变量范围,因为它会给“arr”赋予不同的含义,后者已经在“父或当前”范围中用于表示其他内容”
  • @abhinavp650: new { arr, ind } 使用匿名类型,它是一个类 - 因此它为数组中的每个元素创建一个新对象。 (arr, ind)ValueTuple,它是一个值类型 - 没有创建新对象。匿名类型版本的新对象将是短暂的,因此性能差异可能并不显着......只是值得了解差异。
猜你喜欢
  • 2022-12-17
  • 2021-09-08
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多