2015-07-30 2 views

ответ

1

Вы можете попробовать IndexOf с методом Where в списке вместо массива. Вот код:

string[] str = new string[] { "sun", "mon", "tue", "wed", "thu", "fri", "sat" }; 

var strList = str.ToList(); 

var targetIndex = strList.IndexOf("thu"); 

var result = strList.Where((s, index) => index <= targetIndex).ToList(); 
//result = sun, mon, tue, wed, thu 
+0

Или вы могли бы просто сделать это прямо на массив, который избегает ненужного литья и будет быстрее, особенно для больших массивов. – TheLethalCoder

4

Вы можете использовать метод Take() расширения:

str.Take(Array.IndexOf(str, "thu") + 1).ToArray(); 
// --> returns `["sun", "mon", "tue", "wed", "thu"]` 
2

Если вы хотите детали перед тем входной строки, вы можете написать:

res = str.TakeWhile (s => s != "thu"); 

Этот однако не будет включать в себя thu.

Но можно по фиксированной в письменной форме:

res = str.TakeWhile (s => s != "thu").Concat(new[]{"thu"}); 

Но самый быстрый способ сделать это, вероятно, будет:

var i = Array.IndexOf(str, "thu"); 
if(i != -1) 
{ 
    var target = new string[i + 1]; 
    Array.Copy(str, target, i + 1); 
} 
1
var query = str.TakeWhile(s => s != "thu").Concat(new string[] { "thu" }).ToArray();