如何获得比在数组字符串中少的值

时间:2015-07-30 11:02:20

标签: c#

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

是否可以使用LINQ在输入字符串之前获取索引列表: 即如果输入字符串为thu,则我的结果应为:sun,mon,tue,wed,thu

4 个答案:

答案 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();