2012-01-10 2 views
6
string formIdList = "8256, 8258, 8362, 8120, 8270, 8271, 8272, 8273, 8257, 8279, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8231, 8232, 8233, 8234, 8235, 8242, 8248, 8251, 8252, 8254, 8255, 8262, 8263, 8264, 8265, 8266, 8290, 8292, 8293, 8294, 8300, 8320, 8230, 8227, 8226, 8225, 8224, 8223, 8222, 8221, 8291, 8261, 8241, 8228, 8220, 8211, 8208, 8207, 8206, 8205, 8204, 8203, 8202, 8201, 8153, 8151, 8150, 8130, 8122, 8000, 8101, 8102, 8103"; 

var temp = formIdList.Split(','); 

List<int> ids = new List<int>(); 

idsにIDをロードする必要があります。私はfor-loopを使うことができますが、もっと良い方法があると確信しています。リストにコンマで区切られた数字をロードする方法<int>でC#

+1

一時配列のサイズを知っているので、リストをそのサイズに初期化して、内部配列のサイズ変更を減らしてください。そして「より良い」とは、少ないコードを意味しますか? For Loopは、最後にどのように実装されるかです。 – Bengie

+0

[リストを作成するには、コンマ区切りの文字列からを作成するには?](http://stackoverflow.com/questions/910119/how-to-create-a-listt-from-a-comma-separated-string ) –

+0

> Simon Fox:var asIntegers = arr.Select(s => int.Parse(s)); http://stackoverflow.com/questions/1297231/convert-string-to-int-in-one-string-of-code-using-linq – Bengie

答えて

24

あなたは、LINQを使用することができます。

string formIdList = ... 
List<int> ids = formIdList.Split(',').Select(int.Parse).ToList(); 
+1

+1 - 私はちょうど "あなたが使用できるLINQ: " – davisoa

+0

+1 - 答えはLINQを使うことを知っていましたが、誰かがそれを書くのを待っていました:) –

+2

@アンダー:それはちょうど良い方法でした。新しいラムダを作成する必要はなく、 int.Parse() 'メソッドは、デリゲートをうまく収めます。 –

1

はたぶん、あなたはids.AddRange(temp)ようなものを使用する必要があり、あなたはそれを試してみたのですか?

+0

リスト .AddRangeは文字列配列を受け入れますか? –

2
List<int> ids = formIdList.Split(',').Select(i=>int.Parse(i)).ToList(); 
1

Linqはすべて素晴らしいですが、あなたは少しヒープ・スラッシングを自分で行い、どんな入力が受け入れられるかをより詳細に制御できます。以下はカンマで区切られたすべての文字列挙から整数を生成し、すべての空白を無視します。

public static IEnumerable<int> ParseInts(IEnumerable<char> idList) 
{ 
    bool valid = false; 
    int working = 0; 
    foreach (char c in idList) 
    { 
     if (c >= '0' && c <= '9') 
     { 
      valid = true; 
      working = (working*10) + (c - '0'); 
     } 
     else if (c == ',') 
     { 
      if(valid) 
       yield return working; 
      valid = false; 
      working = 0; 
     } 
     else if(!Char.IsWhiteSpace(c)) 
     { 
      throw new ArgumentOutOfRangeException(); 
     } 
    } 
    if (valid) 
     yield return working; 
} 

次にあなたがList<int>コンストラクタを使用することにより、容易に十分なintのあなたのコレクションを埋めることができます。

string formIdList = "8256, 8258, 8362"; 
List<int> ids = new List<int>(ParseInts(formIdList)); 

ちょうどあなたがこれをどうするつもりかに依存し、どのくらいの頻度、およびどのように大きな入力がしますさあ。小規模な配列の場合はまれに解析されますが、私はすでに受け入れているLinqメソッドを使用します。ボリュームが高い場合は、代わりにこれを試してみてください。