San
San

Reputation: 1837

Split and select specific elements

I have a comma separated string which specifies the indexes. Then I have one more comma separated string which has all the values.

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";

Is there a way to split the string strData and select only the elements which are at index 5, 6, 8 or 15. Or will I have to split the string first then loop through the array/list and then build one more array/list with the values at indexes defined by string strIndexes (i.e. 5, 6,7,15 in this example)

Thanks

Upvotes: 0

Views: 11309

Answers (3)

Marc Gravell
Marc Gravell

Reputation: 1062895

It depends a bit on the length of the string. If it is relatively short (and therefore any array from "Split" is small) then just use the simplest approach that works; Split on "*" and pick the elements you need. If it is significantly large, then maybe something like an iterator block to avoid having to create a large array (but then... since the string is already large maybe this isn't a huge overhead). LINQ isn't necessarily your best approach here...

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

which gives ["ss","ee","jj","ws"].

Upvotes: 2

Jon Skeet
Jon Skeet

Reputation: 1500785

It's reasonably simple:

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

You can create a list from that (by calling selected.ToList()) or you can just iterate over it.

Upvotes: 5

Davide Piras
Davide Piras

Reputation: 44605

call Split(','); on the first string and you get an array of strings, that array you can access by index and the same you can do on the second array. No need to loop array lists.

Upvotes: 0

Related Questions