1

「1, a, 2, a, 3, a」という文字列を分割し、「a」を含むすべてのエントリをフィルタリングして [1, 2, 3] という結果を得る最も簡単な方法は何ですか?

ありがとう、リズ

4

6 に答える 6

5
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();
于 2013-09-17T08:00:40.410 に答える
3
var results = "1, a, 2, a, 3, a".Split(',')
                                .Select(x => x.Trim())
                                .Where(x => x != "a")
                                .ToArray();
于 2013-09-17T08:00:53.187 に答える
2

単純な正規表現を 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]

(あなたの説明に基づいて、これはあなたが実際に求めているものを超えています - それはうまくいきますが、実際に必要以上のことをします)

于 2013-09-17T08:07:47.823 に答える
1

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

     int tmp;
     string[] arr = str.Split(',').
                        Where(x=>int.TryParse(x, out tmp)).
                        ToArray();
于 2013-09-17T08:06:46.843 に答える
0

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

于 2013-09-17T08:19:15.083 に答える
0

これを使用できます:

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;
}
于 2013-09-17T09:19:22.667 に答える