3

次のような一般的な文字列リストがあります。

List<string> list = new List<string>();

list.Add("foo");
list.Add("1");
list.Add("2");
list.Add("bar");
list.Add("foo");
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("bar");

私が知りたいのは、2つの値の間で何を選択する方法があるかどうかです。この場合、私は「1」、「2」、「3」の後にいます。つまり、最後の「foo」と「bar」の間のすべてを選択したいと思います。または、「foo」の後にN行を選択する方が簡単な場合もあります。

私の最善の推測はTakeWhile方法ですが、ここであなたの助けが必要です。

4

2 に答える 2

2

LINQでは通常、最後のものを取得するのが少し難しいです。結局のところ、LastIndexOfあなたが持っているので、私はその部分のために行くでしょう:List

int end = list.LastIndexOf("foo");

list.Skip(end + 1).TakeWhile(x => x != "bar")
于 2012-12-16T02:21:42.773 に答える
2

私は次のようなものを使用します(「bar」が「foo」の後に常に存在するとは限らない場合):

var start = list.FindLastIndex(i => i == "foo");
var end = list.FindLastIndex(i => i == "bar");

if(start != -1 && end != -1){
    var result = list.Skip(start + 1).Take(end - start - 1);
}

またはこれ:

var start = list.FindLastIndex(i => i == "foo");
var end = list.FindLastIndex(i => i == "bar");

if(start != -1 && end != -1){
    var result = list.GetRange(start + 1, end - start - 1);
}
于 2012-12-16T02:25:40.697 に答える