2017-01-17 7 views
0

私はHTML文書からの行を含むリストを作成しました。最後にCSS参照のインデックスを取得しようとしています(後に新しい参照を追加するため)。次のコードは私のためには機能しません。CでリストからXで始まる文字列の最後のインデックスを取得する方法は?

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this. 

LineList = File.ReadAllLines(file).ToList(); 

int index = LineList.LastIndexOf(prefix); 

私は、.LastIndexOf()は、正確に定義された文字列でのみ動作すると推測しています。 prefixで始まる(または含まれている)最後の行のインデックスはどのようにして見つけられますか?上記のアイデアは、このリストのインデックスを作成し、接頭辞をStartsWith最後のいずれかを選択することである

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this. 

List<string> LineList = File.ReadAllLines(file).ToList(); 
int index = LineList.Select((n, i) => new { Value = n, Index = i }) 
    .LastOrDefault(x => x.Value.StartsWith(prefix)) 
    .Index; 

は、あなたがこのようLINQと文字列メソッドStartsWithを使用することができ、あなたに

+0

インデックスを文字列、またはリスト内のインデックス?現時点では不明です。あなたは実際にインデックスを必要としますか、または単にライン自体は必要ですか?これらの質問に対する答えは、あなたがすべきことに影響します。 (最後の行のインデックスを見つけるには、おそらく 'for'ループを使います。他のものはLINQを使います) –

+0

@NicoRiff:それはコンパイルされません。文字列リテラルはここでは問題ではありません。 –

答えて

1

ありがとうございます。

ループを使用することができた場合、あなたはまた、最後の要素から始めて、単純なループを作成し、まあprefix

1

で始まる要素の最初のインデックスを返し、あなたが到達するまで、単にラインの列挙を逆方向に反復することができあなたの基準を満たす最初のものは:

for (var i = lineList.Count -1 ; i != 0; i--) 
{ 
    if (lineList[i].StartsWith("<link rel=\"stylesheet\"") 
    { 
     return i; 
    } 
} 

return -1; 

あなたはLINQとでこれを行うことができますが、私は、あなたが最初にいくつかの基本を把握する必要があると思います。

0

クエリーアイテムを取得するリスト:あなたが言ったように

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this. 

LineList = File.ReadAllLines(file).ToList(); 

int index = LineList.IndexOf(LineList.LastOrDefault(l => l.Contains(prefix))); 
0

あなたが使用することができますLINQ:

var item = LineList.Where(x => x.StartsWith(prefix)).LastOrDefault(); 

が続いてインデックスを取得するためにアイテムを使用しますあなたはで始まる最後の行を見つけたいと思い、あなたはその行を探していますtはあなたのprefixです。あなたはこれを達成することができます

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this. 
LineList = File.ReadAllLines(file).ToList(); 
int index = LineList.Select((line, index) => new { text = line, idx = index }).LastOrDefault(a => a.line.StartsWith(prefix).idx; 

もう一つの方法は、forループを使用して、ちょうど現在の反復のインデックスを割り当てることです:

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this. 
LineList = File.ReadAllLines(file).ToList(); 
int index = -1; 
for(int i = 0; i < LineList.Length; i++) 
    if(LineList[i].StartsWith(prefix)) index = i; 
} 

かのことができます。私はこのコードを使用して、これをお勧めします。この問題を解決するには

シンプルを使用Linq可能:

string prefix = "<link rel=\"stylesheet\""; //goal is to find last line that starts with this. 
LineList = File.ReadAllLines(file).ToList(); 
int index = LineList.IndexOf(LineList.LastOrDefault(line => line.StartsWith(prefix))); 
1

int index = -1; 
if (item != null) 
    index = LineList.IndexOf(item);