2016-08-28 56 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找到那里,你会发现在系统这些新的元组的优势。元组<,>