使用数组中的选择信息

时间:2019-10-15 00:23:35

标签: c# arrays

我有一个[a b,a b,a b,...]形式的字符串数组,我想创建一个仅包含b值的新数组。我试过了.split(“”),但是它总是在数组错误的范围之外提出一个索引。

for (int sequence = 0; sequence < FileIndex.Length; sequence++)
                    {
                        string[] SplitIndex = FileIndex[sequence].Split(' ');
                        sequence++;
                        WriteLine(SplitIndex[sequence]);
                     }

3 个答案:

答案 0 :(得分:0)

for (int sequence = 0; sequence < FileIndex.Length; sequence++)
{
    string[] SplitIndex = FileIndex[sequence].Split(' ');
    sequence++;
    WriteLine(SplitIndex[1]);
}

拆分之后,在SplitIndex中,您将有两个元素:“ a” “ b” 。如果要访问“ b” ,则必须使用SplitIndex[1]。您当前正在使用SplitIndex[sequence]

此外,您有两次sequence++for语句中的一个,循环内的一个。您应该将其从循环中删除。

答案 1 :(得分:0)

您也可以在这里使用LINQ:

using System.Linq;

...

var stringArray = new string[] { "a b", "a b", "a b" };

var result = stringArray
    .Select(str => str.Split(' ').Last())
    .ToArray();

Console.WriteLine("{ " + string.Join(", ", result) + " }");
// { b, b, b }

说明:

  • 使用Enumerable.Select()
  • 选择数组中的每个元素
  • String.Split()分割每个字符串,并用Enumerable.Last()提取最后一个元素。您也可以在此处使用[1]索引第二个元素。
  • 使用List.ToArray()将结果转换为数组。 (可选)您也可以将结果也保留为IEnumerable<string>

答案 2 :(得分:0)

for方式

  1. 删除sequence++;
  2. WriteLine(SplitIndex[sqequence]);更改为WriteLine(SplitIndex[1]);
for (int sequence = 0; sequence < FileIndex.Length; sequence++)
{
  string[] SplitIndex = FileIndex[sequence].Split(' ');
  //sequence++;
  WriteLine(SplitIndex[1]);
}

Linq方式

//Note: no error handling
var bees = FileIndex.Select(fi => fi.Split(' ')[1]);

您可以添加错误处理

var bees = test.Select(fi => fi.Split(' ', StringSplitOptions.RemoveEmptyEntries).Skip(1).FirstOrDefault() ?? "'No b!'" );

测试

var test = new string[] { "a a", "a b", "a c", "a ", "" };

var bees = test.Select(fi => fi.Split(' ', StringSplitOptions.RemoveEmptyEntries).Skip(1).FirstOrDefault() ?? "'No b!'" );

Console.WriteLine(string.Join(" ", bees));
a b c 'No b!' 'No b!'