2011-08-09 15 views
0

インデックスを指定するコンマ区切りの文字列があります。次に、すべての値を持つコンマ区切りの文字列がもう1つあります。特定の要素を分割して選択

EX:

string strIndexes = "5,6,8,15"; 
    string strData = "ab*bc*dd*ff*aa*ss*ee*mm*jj*ii*waa*jo*us*ue*ed*ws*ra"; 

文字列strDataを分割し、インデックス5、6、8であるか、15または私はループ、最初の文字列を分割する必要がありますだけの要素を選択する方法はあります最初の文字列で配列/リストを、次に文字列strIndexesによって定義されたインデックスでの値ともう一つの配列/リストを構築する(すなわち図5に示すように、この例では6,7,15)

おかげ

答えて

4

それは合理的に簡単です:

var allValues = strData.Split('*') 
var selected = strIndexes.Split(',') 
         .Select(x => int.Parse(x)) 
         .Select(index => allValues[index]); 

あなたは(selected.ToList()を呼び出すことによって)ことからリストを作成することができるか、あなたはそれを反復処理することができます。

0

コールSplit(',');を配列の文字列を取得すると、その配列にアクセスできますあなたは2番目の配列で行うことができます。配列リストをループする必要はありません。

2

文字列の長さに少し依存します。比較的短い場合(したがって、「Split」からの配列が小さい場合)、最も単純なアプローチを使用してください。 Split"*"に置き、必要な要素を選択します。それがかなり大きい場合は、大きな配列を作成することを避けるためにイテレータブロックのようなものがあるかもしれません(しかし、文字列が既に大きかったため、これは大きなオーバーヘッドではないかもしれません)。 LINQは、ここに必ずしもあなたの最善のアプローチ... ["ss","ee","jj","ws"]を与える

string[] data = strData.Split('*'); 
string[] result = Array.ConvertAll(strIndexes.Split(','), 
     key => data[int.Parse(key)]); 

ではありません。

関連する問題