string[] str = new string[] {"sun", "mon", "tue", "wed", "thu", "fri","sat"};
是否可以使用LINQ在输入字符串之前获取索引列表:
即如果输入字符串为thu
,则我的结果应为:sun,mon,tue,wed,thu
。
答案 0 :(得分:4)
您可以使用Take()
扩展名方法:
str.Take(Array.IndexOf(str, "thu") + 1).ToArray();
// --> returns `["sun", "mon", "tue", "wed", "thu"]`
答案 1 :(得分: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);
}
答案 2 :(得分: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
答案 3 :(得分:1)
var query = str.TakeWhile(s => s != "thu").Concat(new string[] { "thu" }).ToArray();