2014-02-06 41 views
1

的最后一个值我有一个字符串,它看起来像这样分裂阵列,并得到各指标

string sortOrder= "download-15104,download-15103,download-15105,download-15106,download-15107,download-16104,download-16105"; 

,我想只是IDS。所以,我这样做

var ids= new List<int>(); 
var sortOrderArray = sortOrder.Split(','); 
foreach (var item in sortOrderArray) 
{ 
    var obj = item.Split('-'); 
    ids.Add(int.Parse(obj[1])); 
} 

是否有任何其他方式来做到这一点,做到这一点很快?

+0

我编辑了您的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

非常感谢@JohnSaunders。再次感谢它的真正帮助。 – Ancient

+0

尝试使用正则表达式。看到http://stackoverflow.com/questions/17614911/regex-match-for-comma-delimited-string – mit

回答

1

你可以使用LINQ:

var ids = input.Split(',').Select(x => int.Parse(x.Split('0')[1])).ToList(); 

但是,它不会更快。无论如何它在内部使用循环。它可能更具可读性。

+0

无论如何我们不能避免循环? – Ancient

+0

即使'string.Split'也使用循环遍历字符串中的所有字符。为什么你想避免循环? – MarcinJuraszek

+0

根据你的回答我看到这个代码中的3个循环。那么这不好吗?我只是不要指着你 – Ancient

1
var ids=Regex.Matches(sortOrder,@"\d+(?=,|$)") 
      .Cast<Match>() 
      .Select(m=>int.Parse(m.Value));