从基于数组的列表中选择项目

时间:2017-10-27 09:32:27

标签: c#

我有一个字符串列表,其中包含我想要保存在单独变量中的信息。 .txt文件包含具有此类信息的行:

  

1个厨房1个微波炉微波2相关0.0025 1.29 0.88 1.29

var index = Enumerable.Range(2, 3).ToArray();
string objectInformationText = System.IO.File.ReadAllText("objectList.txt");
string[] objectInformation = objectInformationText.Split('\t');

现在,我想根据我的索引(即第2项和第3项)从objectInformation中提取项目。输出应该是仅包含列表中的项目2和3的子集。

3 个答案:

答案 0 :(得分:3)

解决方案可以使用lambda Select函数,如下所示:

var result = index.Select(x => information[x]).ToList();

答案 1 :(得分:1)

虽然@ OmG的答案是正确的,但在您的情况下创建临时索引集合的替代方法是使用Skip / Take linq选择器。

MONTH_AMOUNT_SUM.[SUM Month], MONTH_AMOUNT_SUM.[SUM Amount]

这显然只适用于连续的索引范围。

答案 2 :(得分:1)

在linQ中,有很多方法可以根据索引进行选择。

string input = "1 kitchen 1 microwave microwave2 relevant 0.0025 1.29 0.88 1.29";
var spt = input.Split(' ');

//Select everything after the 1 element:
var afterTitle = spt.Skip(1);

//Select from index 2 to 5 incuding them -> 1 microwave microwave2 relevant
var from2to5 = spt  .Skip(2)  // Skip index 0, 1
                    .Take(4); // Take 2,3,4,5

//Select based on a Index list, OmG's answer is a better alternative for this one.
int[]  idx = { 1, 2, 4, 5 };
var inIdx = spt.Where((value,index)=> idx.Contains(index));

当可以计算所需的索引时,最后一个例子将是有用的。

//Select only the Even one
var even = spt.Where((value,index)=> index%2==0);