我有一个文本和数字文件,需要将其导入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]));
虽然它有效,但它有点难以阅读,在测试过程中,需要大约100毫秒才能完成。是否有任何潜在的单行,更快的方法或更可读的方法可以实现相同的目标?
答案 0 :(得分: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();
答案 1 :(得分:1)
您可以使用 KeyValuePair 或字典代替元组。
根据这个using FILTER
clause or CASE
inside aggregation function元组比KeyValuePair快。您可以找到更多观点article。
另一方面,字典和元组之间的比较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)。
该方法现在有效地返回三个字符串,在元组值中包含为元素。
该方法的调用者现在将收到一个元组,并可以单独访问这些元素:
var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");
可在此处找到更多信息here您会发现这些新元组相对于 System.Tuple&lt;,&gt;
的优势