C# 带有索引的列表 ConvertAll

标签 c# list linq

考虑一个输入列表 X,由 Tx 类型的对象组成,您需要为其运行多个函数之一,y_a = A(x)、y_b = B(x) 等...(所有这些Ty) 的输出对象来生成输出列表 Y。最后,转换函数的选择是列表内元素索引的函数。

理想情况下,解决方案是一句简单的话(我正在看着你,Linq)。

将其放入代码中:

public OtherType ConversionA (int n) {
}

public OtherType ConversionB (int n) {
}

class MyClass {
  public MyClass (List<int> values) 
    : this (values.ConvertAllWithIndex((value, index) => 
      UseConversionA (index) ? ConversionA (value) : ConversionB (value)) {
  }

  public MyClass (List<OtherType> things) {
    ...
  }

  bool UseConversionA (int index) {
    ...
  }
}

我意识到此示例代码的一个更简单的解决方案是在调用 MyClass 并简单地传递 Y 之前执行从 X 到 Y 的转换,但请耐心等待,因为这是一个人为的示例,看看是否有人知道一种方法复制以目标元素索引为条件的 ConvertAll。

此外,还可以创建 Tx 扩展来创建带有索引的自定义 ConvertAll,但我很好奇是否可以找到一种方法让 Linq(或其他方式)实现这一目标。

最佳答案

Select+ToList 组合怎么样? Select 有一个重载,可以为您提供索引:

values.Select((value, index) => 
      UseConversionA(index) ? ConversionA(value) : ConversionB(value)).ToList()

关于C# 带有索引的列表 ConvertAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728464/

相关文章:

c# - 如何为 Dialog 服务 MVVM Light 编写测试用例

python - 在保留原始列表的同时传递列表

c# - 将多个连续的相等字符从一个字符串减少为一个

c# - EF6 : Use reference/lookup data with IQueryable

c# - 复杂分组依据

c# - Unity3D中 "AndroidJNI.FindClass"和 "AndroidJavaClass"之间有什么区别

c# - 使用 WCF 服务从 CMS 获取数据的 Asp.Net Webforms 应用程序的性能

c# - 解决调用DrawImage时出现 'Out of memory'异常

python - 如何使用 Tweepy 创建 Pandas 数据框?

list - 如何使用 F# 在没有第一项和最后一项的情况下获取子列表?