拆分并选择特定元素

时间:2011-08-09 06:09:11

标签: c# arrays linq list

我有一个逗号分隔的字符串,用于指定索引。然后我还有一个逗号分隔的字符串,其中包含所有值。

EX:

  string  strIndexes = "5,6,8,15";
  string  strData =  "ab*bc*dd*ff*aa*ss*ee*mm*jj*ii*waa*jo*us*ue*ed*ws*ra";

有没有办法分割字符串strData并只选择索引为5,6,8或15的元素。或者我必须首先拆分字符串然后循环遍历数组/列表然后再构建一个数组/列表,其中包含由字符串strIndexes定义的索引处的值(在此示例中为5,6,7,15)

由于

3 个答案:

答案 0 :(得分:4)

这很简单:

var allValues = strData.Split('*')
var selected = strIndexes.Split(',')
                         .Select(x => int.Parse(x))
                         .Select(index => allValues[index]);

您可以从中创建一个列表(通过调用selected.ToList()),或者您可以迭代它。

答案 1 :(得分:2)

这取决于字符串的长度。如果它相对较短(因此“Split”中的任何数组都很小)那么只需使用最简单的方法即可; Split "*"并选择您需要的元素。如果它非常大,那么可能就像迭代器块一样,以避免必须创建一个大型数组(但是......因为字符串已经很大,这可能不是一个巨大的开销)。 LINQ不是必然你最好的方法......

string[] data = strData.Split('*');
string[] result = Array.ConvertAll(strIndexes.Split(','),
      key => data[int.Parse(key)]);

给出了["ss","ee","jj","ws"]

答案 2 :(得分:0)

在第一个字符串上调用Split(',');并获得一个字符串数组,您可以通过索引访问该数组,并且可以在第二个数组上执行相同的操作。无需循环数组列表。