2016-08-28 7 views
0

ファイルがテキストと数字で埋められており、Tuple<string, int>配列(Tuple<string, int>[] vowels = new Tuple<string, int>[81])にインポートする必要があります。ファイルには、私が最初に使用する現在の方法は、インポートした後ファイルからタプル配列を作成する

string[] vowelsin = File.ReadAllText("path.txt").Split(',');

を使用して文字列配列にそれをインポートし、私は

を使用してタプルにデータを入れ、この

a,2,e,6,i,3,o,8,u,2,y,5

ようになります

for (int x = 0; x < 81; x++) 
     vowels[x] = Tuple.Create(vowelin[x*2], int.Parse(vowelin[(x*2) + 1])); 

これは動作しますが、読みにくく、テスト中に100msほどかかることがあります。 1つの潜在的なライナー、より速いメソッド、またはより読みやすいメソッドがあり、同じことを引き出すことができますか?

+0

String.Splitを使用すると、パフォーマンスが大幅に低下します。それは文字を反復的に反復することによってより速く書かれ、それに応じて行動することができる。 – CSharpie

答えて

1
string[] vowelsin = File.ReadAllText("path.txt").Split(','); 
vowles = vowelsin.Zip(vowelsin.Skip(1), 
          (a, b) => new Tuple<string, string>(a, b)) 
         .Where((x, i) => i % 2 == 0) 
         .ToArray(); 
+0

コードオンリーの回答は禁止されていませんが、これは群衆調達ではなくQ&Aコミュニティであることを理解してください。通常、OPがコードを回答として理解していれば、彼自身の上に同様の解決策を提示し、最初に質問を投稿しなかったでしょう。同様の原則は、コードが馴染みにくい今後の読者にも適用されます。そのように、あなたの答えやコードに文脈を提供してください。 – XenoRo

1

あなたはKeyValuePairまたは辞書代わりにタプルのを使用することができます。

これによれば、articleタプルはKeyValuePairより高速です。より多くの視点を見つけることができますhere

一方、辞書とタプルの比較はhereとなっています。

良いニュースがここに来る:

タプルについての新機能が導入されましたC#7.0のとおり:

(string, string, string) LookupName(long id) // tuple return type 
{ 
    ... // retrieve first, middle and last from data storage 
    return (first, middle, last); // tuple literal 
} 

これはタプルを使用するための新しい方法です。(type、...、type)これは、メソッドが複数の値(この場合は3つ)を返すことを意味します。

このメソッドは、タプル値の要素としてラップされた3つの文字列を効果的に返します。

メソッドの呼び出し元は、今タプルを受け取ることになりますし、個別の要素にアクセスすることができます。

var names = LookupName(id); 
WriteLine($"found {names.Item1} {names.Item3}."); 

さらに詳しい情報は、あなたがシステムを超えるこれらの新しいタプルの利点がありますがあり、ここでWhat is new in C# 7.0を見つけることができます。 Tuple <、>

関連する問題