2016-08-28 54 views
0

我有一個文件填充文本和數字,並需要將其導入Tuple<string, int>數組(Tuple<string, int>[] vowels = new Tuple<string, int>[81])。該文件看起來用從文件創建元組數組

像這樣

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

我用最初目前的方法導入成使用

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

一個字符串數組導入後,我把數據轉換成元組

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

雖然它的工作原理很難閱讀,在測試過程中需要大約100ms才能完成。是否有任何潛在的單線程,更快的方法,或更可讀的方法可以拉開同樣的事情?

+0

使用String.Split是一個巨大的性能浪費。通過迭代內容charachterwise並相應地採取行動,可以更快地寫出它。 – 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

儘管只有代碼的答案是不被禁止的,但請理解,這是一個問答社區,而不是衆包的問題社區,而且,如果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),這意味着該方法將返回多個值(在這種情況下爲三個)。

該方法現在有效地返回三個字符串,作爲元組值包裝。

方法的調用者現在會收到一個元組,可單獨訪問的元素:

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

更多信息可以在這裏What is new in C# 7.0找到那裏,你會發現在系統這些新的元組的優勢。元組<,>