次のようなリストがあります。
item.Add("a");
item.Add("as");
item.Add("b");
item.Add("fgs");
item.Add("adsd");
(たとえば) "a" で始まるすべての項目を見つけるにはどうすればよいですか?
この「a」はハードコードされた文字列ではないため、文字列ごとにこれを行う関数が必要になります。
FindAll を試してみましたが、その仕組みがわかりませんでした。
Br、ウルフィー
「最初から」とは最初の文字を意味する場合、次のようになります。
item.FindAll(i => i[0] == 'a');
文字列(1文字以外の場合もあります)を意味する場合は、次のようになります。
item.FindAll(i => i.StartsWith("a"));
大文字と小文字を区別しない、ロケールベースなど、別の比較が必要な場合は、次のような関連するIndexOfを実行します。
item.FindAll(i => i.IndexOf("a", StringComparison.CurrentCultureIgnoreCase) == 0);
上記のすべては、関連するcharまたはstring変数またはパラメーターを使用するように簡単に適合させることができます。
リストによって提供される追加のプロパティとメソッドが必要ない場合は、新しいリストを作成するWhere
よりも効率的に使用でき、一度に作成すると同時に、一致する結果を繰り返して列挙します。 。FindAll
FindAll
Where
またはLINQを使用
from i in items where i.StartsWith("a") select i;
NET2.0の場合、次のメソッドを使用できます。'pattern'は、検索する引数です(fe "a")
private List<string> FindAll(List<string> list, string pattern)
{ // returns found results
return list.FindAll(delegate(string item)
{
return item.StartsWith(pattern);
});
}
startwith基準文字列を含む別のリストがあると思いました。あなたのアイテムを「単語」と呼び、他のリストを「キーワード」と呼びましょう。したがって、以下のクエリは必要なものを返します。
List<string> words = new List<string>();
words.Add("a");
words.Add("as");
words.Add("b");
words.Add("fgs");
words.Add("adsd");
List<string> keywords = new List<string>();
keywords.Add("a");
keywords.Add("b");
var result = words.FindAll(o =>
keywords.Any(a => o.StartsWith(a))
);
この結果には、keywordsのいずれかのキーワードで始まる単語が含まれています。
List<string> item = new List<string>();
item.Add("a");
item.Add("as");
item.Add("b");
item.Add("fgs");
item.Add("adsd");
var res1 = item.FindAll(i => i.StartsWith("a"));
var res2 = item.Where(i => i.StartsWith("a"));
これを試して
item.FindAll(i => i.Contains("a"));
これにより、フィルタリングされた文字列のみを含むリストが返されます。