「1, a, 2, a, 3, a」という文字列を分割し、「a」を含むすべてのエントリをフィルタリングして [1, 2, 3] という結果を得る最も簡単な方法は何ですか?
ありがとう、リズ
string[] result = "1, a, 2, a, 3, a".Split(',')
.Select(s => s.Trim())
.Where(s => s != "a")
.ToArray();
大文字と小文字を区別しないで比較する場合:
string[] result = "1, a, 2, a, 3, a".Split(',')
.Select(s => s.Trim())
.Where(s => !"a".Equals(s, StringComparison.OrdinalIgnoreCase))
.ToArray();
var results = "1, a, 2, a, 3, a".Split(',')
.Select(x => x.Trim())
.Where(x => x != "a")
.ToArray();
単純な正規表現を LINQ と組み合わせると、大雑把ではありますが効果的にこれを管理できます。
public static int[] NumberList(string source, string filter)
{
var split = Regex.Split(source, "(\\d+,\\s*\\w)");
var list = (from s in split where s.EndsWith(filter)
select int.Parse( s.Split(',')[0])).ToArray();
return list;
}
1 つ目Regex.split
は、数字、カンマ、文字を含む配列に分割します。次に、LINQ クエリは、フィルター文字で終わる項目のみを配列から抽出し、コンマの前の部分を整数の配列として返します。
呼び出しの例:
var result = NumberList("1, a, 2, b, 3, a, 4, c", "a");
戻り値:
[1, 3]
(あなたの説明に基づいて、これはあなたが実際に求めているものを超えています - それはうまくいきますが、実際に必要以上のことをします)
あなたが使用することができます
int tmp;
string[] arr = str.Split(',').
Where(x=>int.TryParse(x, out tmp)).
ToArray();
Linq による正規表現
string[] result = "1, a, 2, a, b , 3, a".Split(',')
.Select(s => s.Trim())
.Where(s => Regex.IsMatch(s, @"^\d+$"))
.ToArray();
結果
1、2、3
これを使用できます:
var arr = "1, a, 2, b, 3, a, 4, c"
.Split(',')
.Select(x => Parse(x))
.Where(x => x != null)
.Select(x => x.Value)
.ToArray();
Parse
メソッド:
static int? Parse(string value)
{
int result;
if (int.TryParse(value, out result))
{
return result;
}
return null;
}